[剑指Offer] 15.反转链表

题目描述

输入一个链表,反转链表后,输出链表的所有元素。

【思路1】三个指针在链表上同时滑动。

 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         ListNode* p = pHead;
13         ListNode* q = NULL;
14         ListNode* r = NULL;
15         while(p != NULL){
16             r = p->next;
17             p->next = q;
18             q = p;
19             p = r;
20         }
21         return q;
22     }
23 };

【思路2】头插法

 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         ListNode* p = pHead;
13         ListNode* q = NULL;
14         while(p != NULL) {
15             ListNode* temp = p->next;
16             p->next = q;
17             q = p;
18             p = temp;
19         }
20         return q;
21     }
22 };

 

posted @ 2017-02-27 16:38  Strawberry丶  阅读(116)  评论(0编辑  收藏  举报