15、剑指offer--反转链表

题目描述
输入一个链表,反转链表后,输出链表的所有元素。
 
解题思路:该题需要定义三个指针,分别记录当前结点、前一结点、下一结点。
反转过程中,先获得下一结点,然后让当前结点下一个指向前一结点,下一个前一结点为当前结点,当前结点为下一结点。注意如果下一结点为空,则当前结点为为最后一个结点,即返回的头指针。
 1 #include <iostream>
 2 #include <malloc.h>
 3 using namespace std;
 4 struct ListNode {
 5     int val;
 6     struct ListNode *next;
 7     ListNode(int x) :
 8             val(x), next(NULL) {
 9     }
10 };
11 class Solution {
12 public:
13     //需要定义三个指针、当前节点、前一个节点、后一个节点
14     ListNode* ReverseList(ListNode* pHead) {
15         ListNode *pre = NULL;
16         ListNode *pNode = pHead;
17         ListNode *pReverseHead = pHead;
18         while(pNode != NULL)
19         {
20             ListNode *pNext = pNode->next;//保存下一结点
21             if(pNext == NULL)//下一结点为空
22             {
23                 pReverseHead = pNode;//当前结点为最后一个结点,即为返回的头指针
24             }
25             pNode->next = pre;//当前结点下一个指向前一个结点
26             pre = pNode;//前一结点为当前结点
27             pNode = pNext;//当前结点后移
28 
29         }
30         return pReverseHead;
31     }
32 };
33 ListNode *CreateList(int n)
34 {
35     ListNode *head;
36     ListNode *p,*pre;
37     int i;
38     head=(ListNode *)malloc(sizeof(ListNode));
39     head->next=NULL;
40     pre=head;
41     for(i=1;i<=n;i++)
42     {
43         p=(ListNode *)malloc(sizeof(ListNode));
44         cin>>p->val;
45         pre->next=p;
46         pre=p;
47     }
48     p->next=NULL;
49 
50     return head->next;
51 }
52 /*-------------------------输出链表-----------------------------------*/
53 void PrintList(ListNode *h)
54 {
55     ListNode *p;
56 
57     p=h;//不带空的头结点
58     while(p)
59     {
60         cout<<p->val<<" ";
61         p=p->next;
62         cout<<endl;
63     }
64 }
65 int main()
66 {
67     int n1;
68     ListNode *h1;
69     cout<<"输入链表的结点数目"<<endl;
70     cin>>n1;
71     h1 = CreateList(n1);
72     cout<<"链表为:"<<endl;
73     PrintList(h1);
74     cout<<"反转后链表为:"<<endl;
75     Solution s;
76     h1 = s.ReverseList(h1);
77     PrintList(h1);
78     return 0;
79 }

posted @ 2017-05-16 09:31  qqky  阅读(199)  评论(0编辑  收藏  举报