问题是给定一个链表的头节点,要求把链表反转,输出所有元素。这里讲下怎么反转。
链表如图所示:
首先定义一个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 };