链表反转(c++描述)

问题是给定一个链表的头节点,要求把链表反转,输出所有元素。这里讲下怎么反转。

链表如图所示:

首先定义一个pre和一个tmp都为空

ListNode* tmp=NULL;
ListNode* pre=NULL;

第二步,把头节点的原next指针放入tmp中

第三步,使next指针指向pre,这时候链表是这样的

第四步,把pHead赋值给pre

第五步,把tmp中存储的原next指向的值赋给pHead,于是链表就变成这样

从这个过程可以看出phead与pre各自往前走了一步,以此类推直到phead到达表尾,最后再执行一次结束循环。

==================================================================================================

代码如下:

 1 /*
 2 struct ListNode {
 3     int val;
 4     struct ListNode *next;
 5     ListNode(int x) :
 6             val(x), next(NULL) {
 7     }
 8 };*/
 9 class Solution {
10 public:
11     ListNode* ReverseList(ListNode* pHead) {
12         if(pHead==NULL){
13             return NULL;
14         }
15         ListNode* tmp=NULL;
16         ListNode* pre=NULL;
17         while(pHead){
18             tmp=pHead->next;
19             pHead->next=pre;
20             pre=pHead;
21             pHead=tmp;
22         }
23         return pre;
24     }
25 };
原文地址:https://www.cnblogs.com/cracker13/p/8547183.html