題目
反轉一個鏈表
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL
解法
這道題我們需要兩個額外的鏈表節點變量ListNode
來協助完成
假設我們有一個1->2->3->4->5
的鏈表,我們定義cur
和prev
兩個節點變量,分別用來表示當前節點和上一個節點,cur
初始指向頭節點,prev
初始爲空,然後遍歷這個鏈表
從1
這個節點開始,此時cur
即爲1
,我們只需要在遍歷過程中不斷的改變每個節點指針的方向,讓它指向前一個節點即可,需要注意的就是,大部分語言都需要實現存下cur.next
的值,否則在指針的變換中可能會使鏈表斷掉
代碼
Java 版
public ListNode reverseList(ListNode head) {
ListNode cur = head;
ListNode pre = null;
while (cur != null) {
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
Python 版
def reverseList(head):
cur, prev = head, None
while cur:
cur.next, prev, cur = prev, cur, cur.next
return prev
Python 的代碼中cur.next, prev, cur = prev, cur, cur.next
使用了多重賦值的語法,關於多重賦值原理的解釋,看這裏:Python——多重賦值的原理