单链表的逆置
来源:互联网 发布:java中锁的种类 编辑:程序博客网 时间:2024/04/29 12:15
最近看了面试常问到的单链表逆置问题,做了一下总结。
第一种方法,使用三指针。
- node *reverse(node *head)
- {
- node *p1,*p2,*p3;
- if(head==NULL||head->next==NULL)
- return head;
- p1=head,p2=p1->next;
- while(p2)
- {
- p3=p2->next;
- p2->next=p1;
- p1=p2;
- p2=p3;
- }
- head->next=NULL;
- head=p1;
- return head;
- }
最后执行完循环后,记得让head->next = NULL; 让P1做head节点,即可实现逆置。
第二种方法,递归。
- LNode* ReverList1(LNode* head)
- {
- if (head == NULL)
- return NULL;
- if (head->next == NULL)
- {
- return head;
- }
- LNode* Node = head; //保留上一个结点
- LNode* Nex = head->next;
- LNode* HeadNode = ReverList1(Nex);
- Nex->next = Node; //逆置
- Node->next = NULL; //这句必须有,否则会产生循环链表
- return HeadNode;//返回逆置链表的尾结点
- }
理解图如下
0 0
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- 单链表的逆置
- JAVA多线程和并发基础面试问答
- 程序员到项目经理:从内而外的提升(比较全面的介绍)
- Reverse Vowels of a String
- 关于Culling mask 初认识
- New的返回值和New的(3种)用法详解
- 单链表的逆置
- github提交本地代码
- SQL基本语法&SQLite
- (礼拜五log)document.cookie AND 前端图标推荐
- scrapy安装
- zeppelin的安装与使用
- 每天一个linux命令(7):mv命令
- ORACLE中将一列已有数据的字段类型进行改变的解决方案
- 通知机制(NSNotification)