链表问题:如何反转链表?
来源:互联网 发布:单片机数字式温度计 编辑:程序博客网 时间:2024/06/15 01:52
在面试中,被问到有关链表的问题是很多的。如题,本文就是其中一个。
一共有三种思路:循环与递归,还有一种是头插:
循环的思想是用三个节点指针来进行反转,如图:
有了思路之后,代码如下:
struct ListNode { int _value; struct ListNode *_next; }// ListNode* reverseList(ListNode* pHead) { ListNode *first = pHead->next; ListNode *current = pHead; ListNode *last = NULL; //迭代反转 while ( current != NULL ){ current ->next = last; last = current; current = first; if ( first != NULL ){//最后一个节点时first为NULL first = first->next; } } return last; }
你可以调整一下判断的位置,这样可以更简洁;
第二个思路:
要反转当前节点,则后面节点须已经反转,故而可用递归,代码如下:
ListNode* ReverseList(ListNode* pHead) { if (NULL == pHead) return NULL; return reverse(pHead, NULL); } ListNode *reverse(ListNode *pHead, ListNode *prev){ if (pHead == NULL) return prev; ListNode *Next = pHead->next; pHead->next = prev; return reverse(Next, pHead); }
第三个思路:头插法
每次循环取出原链表的一个节点,对新链表进行头插
ListNode* reverseList(ListNode* pHead) { ListNode *nhead = NULL; ListNode *Next = NULL; ListNode *cur = NULL; while (pHead){ cur = pHead; pHead = pHead->next; cur->next = Next; nhead = cur; Next = cur; } return nhead; }
除了上述的办,你也可以借助数据结构来帮助你,比如栈,不过这似乎走远了。。
0 0
- 链表问题:如何反转链表?
- 链表反转问题收集
- 数据结构 -链表反转问题
- 链表的反转问题
- [总结] 到底如何反转一个链表
- Java:如何实现链表的反转
- 单向链表反转的问题
- 关于反转链表的问题
- leetcode题目 反转链表系列问题
- 链表奇偶排序以及反转问题
- 单向链表反转(倒置)问题
- 链表反转
- 反转链表
- 单向链表反转
- 链表反转:
- 链表的反转
- 链表反转
- 反转单向链表
- Android APP——实用Android程序Criminallnent Application
- Linux下top命令详解
- Python与图像处理7
- 简述JDBC调用数据库的基本步骤
- Android传感器之摇一摇与指南针
- 链表问题:如何反转链表?
- 利用Python递归列举目录下的文件并进行有序的排列
- 面向对象程序设计上机练习七(类和对象)
- BGP 配置
- python学习-字符串操作
- hdu BFS 2952
- Outlook2013/2016中的Gmail设置
- hdu 2795 billboard(线段树)
- ServletConfig和ServletContext接口