O(n)複雜度實現連結串列反轉
阿新 • • 發佈:2018-12-16
-
輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。
-
插頭法思想: 將頭結點斷開,把後面的節點依次取出,插入到頭部,可實現O(n)複雜度連結串列反轉效果。
-
演示程式碼
#include<iostream> #include<stdlib.h> using namespace std; struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; ListNode* ReverseList(ListNode* pHead) { if(!pHead) return NULL; if(!pHead->next) return NULL; ListNode* first = pHead->next; ListNode* second = pHead->next; pHead->next=NULL; while(first) { second=second->next; first->next=pHead; pHead=first; first=second; } return pHead; } int main() { ListNode* head; ListNode * p =(ListNode*) malloc(sizeof(ListNode));; head = p; for(int i = 0;i<5;i++) { ListNode* point =(ListNode*) malloc(sizeof(ListNode)); point->val = i; point->next=NULL; p->next=point; p=point; } p=ReverseList(head); while(p) { cout<<p->val<<endl; p=p->next; } return 0; }