剑指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反转链表的主要内容,如果未能解决你的问题,请参考以下文章