单链表的若干问题

简介:

(1).试编写算法将带头结点单链表就地逆置,所谓“就地”是指辅助空间为O(1)

【解析】

此问题有两种解法。

a 把头节点摘下来,然后用头插法建链表就形成所谓的就地逆置
b 依次遍历将指针反转,不过最后一个节点需要注意一下
两算法时间复杂度都是O(n),空间都是O(1)

【算法】

第一种算法:

//就地反转
int LinkListRerverse(LinkList *head){
	LinkList *q,*p;
	p = head->next;
	head->next = NULL;
	while(p != NULL){
		q = p->next;
		p->next = head->next;
		head->next = p;
		p = q;
	}
	return 0;
}

完整例子:

#include<stdio.h>
#include<malloc.h>

typedef struct Node
{
	int data;
	struct Node *next;
}LinkList;

//就地反转
int LinkListRerverse(LinkList *head){
	LinkList *q,*p;
	p = head->next;
	head->next = NULL;
	while(p != NULL){
		q = p->next;
		p->next = head->next;
		head->next = p;
		p = q;
	}
	return 0;
}
//输出数据
int LinkListPrintf(LinkList *head){
	LinkList *p;
	p = head;
	while(p->next){
		p = p->next;
		printf("%d ",p->data);
	}
	printf("\n");
	return 0;
}
//创建链表
int LinkListCreate(LinkList *head,int n){
	LinkList *p,*newNode;
	head->next = NULL;
	p = head;
	//输入数据
	for(int i = 0;i < n;i++){
		//创建节点
		newNode = (LinkList*)malloc(sizeof(LinkList));
		scanf("%d",&newNode->data);

		newNode->next = p->next;
		p->next = newNode;
		p = newNode;
	}
	return 0;
}

int main()
{
	int n;
	while(scanf("%d",&n) != EOF){
		LinkList *head;
		head = (LinkList*)malloc(sizeof(LinkList));
		//创建链表(n个节点)
		LinkListCreate(head,n);
		//输出已建链表
		LinkListPrintf(head);
		//就地反转
		LinkListRerverse(head);
		//输出反转后结果
		LinkListPrintf(head);
	}
	return 0;
}


目录
相关文章
|
6月前
|
存储
数据结构实验之链表一:顺序建立链表
数据结构实验之链表一:顺序建立链表
|
1月前
【数据结构】环形、相交、回文、分割、合并、反转链表
【数据结构】环形、相交、回文、分割、合并、反转链表
28 0
|
6月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
53 1
|
5月前
|
存储 算法
数据结构和算法学习记录——线性表之单链表(上)-初始单链表及其尾插函数(顺序表缺陷、单链表优点、链表打印)
数据结构和算法学习记录——线性表之单链表(上)-初始单链表及其尾插函数(顺序表缺陷、单链表优点、链表打印)
39 0
|
机器学习/深度学习 存储
链表oj题 && 链表与LinkedList && 栈的概念 && 队列的概念 && 树和二叉树
链表oj题 && 链表与LinkedList && 栈的概念 && 队列的概念 && 树和二叉树
158 38
|
11月前
数据结构单链表之删除给定位置的链表节点 | 第五套
数据结构单链表之删除给定位置的链表节点 | 第五套
100 0
|
算法
单链表(面试算法题3)---两链表相交问题
单链表(面试算法题3)---两链表相交问题
40 0
|
算法 索引
【数据结构与算法】链表2:节点交换与删除 & 链表相交 & 环形链表
【数据结构与算法】链表2:节点交换与删除 & 链表相交 & 环形链表
107 0
【基础算法】单链表的OJ练习(3) # 移除链表元素 # 相交链表 #
【基础算法】单链表的OJ练习(3) # 移除链表元素 # 相交链表 #
|
算法
大厂面试经典单链表例题(创建有序单链表,逆置单链表,判断链表是否有环,取链表中间节点)(含核心代码与解析)
大厂面试经典单链表例题(创建有序单链表,逆置单链表,判断链表是否有环,取链表中间节点)(含核心代码与解析)