结构之法------从无头单链表中删除节点(扩展问题)
2013-09-04 11:18
176 查看
问题:编写一个函数,给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来。
由于是单链表且只能遍历一次,因此单纯的把链表节点中的值进行前后交换是不符合题意的。
最直接也是最高效的就是把原来的各个节点的指针反过来即可。
如图:
这就需要定义三个指针prior、pCurrent、pNext,指向如下图:
代码清单:
由于是单链表且只能遍历一次,因此单纯的把链表节点中的值进行前后交换是不符合题意的。
最直接也是最高效的就是把原来的各个节点的指针反过来即可。
如图:
这就需要定义三个指针prior、pCurrent、pNext,指向如下图:
代码清单:
node * reverseLinklist(node * L) { assert(L != NULL); node * H = L; //H为链表头节点 node * prior = NULL; node * pCurrent = NULL; node * pNext = NULL; prior = H; pCurrent = pNext = prior->next; prior->next = NULL; //头节点指向置空,相当于将其先变为“尾节点” while(pNext) { pNext = pCurrent->next; //pNext指针移动一个位置 //如果pNext指针为空,则表明已经到达链表尾部,此时将H指向pCurrent节点,意味着原来的链表的“尾节点”变为现在的“头节点” if(pNext == NULL) { H = pCurrent; } pCurrent->next = prior; prior = pCurrent; pCurrent = pNext; } return H; }
相关文章推荐
- 编程之美:第三章 结构之法 3.4从无头单链表中删除节点
- 从无头单链表中删除节点--扩展:反转单链表
- 从无头单链表中删除节点 结构之法 4
- 从无头单链表中删除节点
- 编程之美:从无头单链表中删除节点
- 左程云_算法与数据结构 — 链表问题 — 03删除链表的中间节点和a/b处的节点
- 链表--删除一个无头单链表的非尾节点
- 从无头单链表中删除节点
- 无头单链表的非尾节点删除
- 约瑟夫问题(没有头节点的循环链表2——删除法)
- C语言:【单链表】删除一个无头单链表的非尾节点
- (转)问题:假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(既不是第一个,也不是最后一个节点),请将该节点从单链表中删除。
- 数据结构——2 单链表插入和删除节点
- 从无头单链表中删除节点
- 1.删除一个无头单链表的非尾节点 2.从尾到头打印单链表
- 编程之美-从无头单链表中删除节点方法整理
- 3.4 从无头单链表中删除节点
- 从无头单链表中删除节点及单链表的逆置
- 链表问题---删除无序单链表中值重复出现的节点
- 【基础备忘】关于递归删除链表节点为什么不会断链问题解释