LeetCode-206——反轉鏈表(Java、Python)

題目

​ 反轉一個鏈表

​ 示例:

輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL

解法

​ 這道題我們需要兩個額外的鏈表節點變量ListNode來協助完成

​ 假設我們有一個1->2->3->4->5的鏈表,我們定義curprev兩個節點變量,分別用來表示當前節點和上一個節點,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——多重賦值的原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章