首页 > 编程语言 > 详细

逆置单链表-C语言版-头插法/三指针法

时间:2020-03-14 13:25:19      阅读:139      评论:0      收藏:0      [点我收藏+]

 

题目

 

反转一个单链表。

 

示例:

 

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法一:头插法

代码思想:设单链表的头结点为A,两指针分别为p,r。

1.指针p指向头结点之后的第一个结点,指针r指向指针p的后继结点。

2.把指针p所指的结点插在头结点之后。

3.令指针p指向r

4.r指向r的后继结点

5.重复2,3,4步,直至r==NULL

6.此时只剩最后一个结点未插入,将p指向的结点插入头结点之后,完成

 

 1 void Inverse(LNode *A)
 2 {
 3     LNode *p,*r;
 4     p=A->next;        //指针p指向头结点之后的第一个结点
 5     r=p->next;        //指针r指向指针p的后继结点
 6     while(r!=NULL)    //当r指向空,就不能继续执行循环了,否则r将指向空的后继,导致运行失败
 7     {
 8         p->next=A->next;  //把指针p所指的结点插在头结点之后
 9         A->next=p;        
10         p=r;              //令指针p指向r
11         r=r->next;        //r指向r的后继结点
12     }
13     p->next=A->next;      //将p指向的结点插入头结点之后
14     A->next=p;
15 }

 

 

方法二:三指针法

代码思想:设单链表的头结点为A,设三个指针分别为p,q,r。

1.令p指向空

2.q指向头结点之后的第一个结点

3.r指向q的后继结点,q的后继指针指向p

4.p指向q,q指向r(一定要让p先指向q, 否则q指向r之后,无法再找到p)

5.重复3.4步,直到r==NULL,完成

 1 void Inverse(LNode *A)
 2     {
 3         LNode *p,q,r;
 4         p=NULL;          //令p指向空
 5         q=A->next;       //q指向头结点之后的第一个结点
 6         while(r!=NULL)
 7         {
 8             r=q->next;   //r指向q的后继结点
 9             q->next=p;   //q的后继指针指向p
10             p=q;         //不断链的关键
11             q=r;        
12         }
13         A->next=p;       //p插入到头结点之后
14     }

 

逆置单链表-C语言版-头插法/三指针法

原文:https://www.cnblogs.com/SmallCactus/p/12488870.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!