15 反转链表

 1 反转链表
 2 //题目:输入一个链表,反转链表后,输出链表的所有元素
 3 struct ListNode
 4 {
 5     int val;
 6     struct ListNode* next;
 7     ListNode(int x):val(x), next(NULL){}
 8 };
 9 //思路:比如 1->2->3->4->5->6
10 //反转后 1<-2<-3  4<-5<-6
11 //为了防止3和4断开,需要以下操作
12 //首先知道结点3的前一个结点2, 因为我们需要把3的next指向2
13 //然后需要保存3的下一个结点4,以防止链表断开。
14 //因此需要定义3个指针,遍历到的结点,前一个结点,后一个结点
15 class Solution
16 {
17 public:
18     ListNode* ReverseList(ListNode* pHead)
19     {
20         if (pHead == NULL)
21         {
22             return NULL;
23         }
24         ListNode* pNodePre = NULL;
25         ListNode* pNodeRear = NULL;
26         ListNode* tmpNode = pHead;
27         while(tmpNode != NULL)
28         {
29             ListNode* tmpNext = tmpNode->next;//保存下一个结点
30             if (tmpNext == NULL)
31             {
32                 pNodeRear = tmpNode;    
33             }
34             tmpNode->next = pNodePre;
35             pNodePre = tmpNode;
36             tmpNode = tmpNext;
37         }
38         return pNodeRear;
39     }
40     
41 };

 

posted @ 2017-08-20 21:42  繁星的夜空2012  阅读(79)  评论(0)    收藏  举报