24反轉連結串列
阿新 • • 發佈:2020-07-22
題目描述:
定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點。
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL
程式碼:
迭代法
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* reverseList(struct ListNode* head){ struct ListNode *cur=head; struct ListNode *pre=NULL; while(cur!=NULL) { struct ListNode *tmp=cur->next; cur->next=pre; pre=cur; cur=tmp; } return pre; }
總結:
三種方法:
①利用外部空間
申請一個動態擴容的陣列,將整個連結串列中的值存入陣列或者容器中,然後反向取出
但是這種方法空間複雜度高,不是一種很好的方法
②雙指標迭代
定義兩個指標,一個pre,一個cur,以及一個tmp臨時變數,用來儲存cur->next的值
迴圈結束的條件是cur指向為空,則pre當前指向的元素就是反轉連結串列要返回的元素
③遞迴解法:
遞迴法程式碼不會寫