反转链表
struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; #include <vector> using namespace std;
1.导入stl vector后直接反转,相当于用栈了
///////vector反转(栈) class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> v; while(head!=NULL){ v.push_back(head->val); head = head->next; } reverse(v.begin(), v.end()); return v; } };
2.递归,用递归的栈
///////递归 class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { return recursion(head); } vector<int> recursion(ListNode *head){ vector<int> v; if(head != NULL){ v = recursion(head->next); v.push_back(head->val); } return v; } };
3.改动链表本身,链表反向
///////链表反转 class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> v; if(head == NULL){ return v; } ListNode *pre = NULL; ListNode *mid = head; ListNode *next = head->next; while (mid != NULL){ mid->next = pre; pre = mid; mid = next; //cout<<pre->val<<" "<< mid->val<<endl;这一句有错误最后一个mid是null不能执行,ide会提醒有了这句下面会不执行!!! if(next != NULL){ next = next->next; } } while(pre!=NULL){ v.push_back(pre->val); //忘了加自增导致内存溢出 pre = pre->next; } return v; } };
在递归版本的时候用的CLion不知道什么缘故,居然注释会干扰代码,有的注释了出现特点的字结尾会影响执行结果(13,14行本来有注释结果14行的“上”字结尾导致下面的pre指针一直赋不了值,测试了一个上午才发现下面的注释加了也会导致return被unreachable)!!!