剑指offer反转链表

Posted smartheadliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer反转链表相关的知识,希望对你有一定的参考价值。

1. 利用栈:后进先出

  将链表从头到尾压入栈中,再从栈中pop出来,对链表从头到尾赋值。

 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         stack<int> s;
13         ListNode* p=pHead;
14         while(p)
15         {
16             s.push(p->val);
17             p=p->next;
18         }
19         p=pHead;
20         while(!s.empty())
21         {
22             p->val=s.top();
23             s.pop();
24             p=p->next;
25         }
26         return pHead;
27     }
28 };

 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* cur;
13         ListNode* nxt;
14         ListNode* first;
15         if(!pHead)
16             return NULL;
17         else
18             first=cur=pHead;
19         if(!cur->next)
20             return pHead;
21         nxt=cur->next;
22         while(nxt)
23         {
24             cur=nxt;
25             nxt=nxt->next;
26             cur->next=pHead;
27             pHead=cur;
28         }
29         first->next=NULL;
30         return pHead;
31     }
32 };

 

以上是关于剑指offer反转链表的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer-反转链表

剑指Offer:反转链表

剑指offer:反转链表

剑指offer-反转链表

剑指OFFER 反转链表

反转链表-剑指Offer