1. 程式人生 > 實用技巧 >24反轉連結串列

24反轉連結串列

題目描述:

定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點。

示例:

輸入: 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當前指向的元素就是反轉連結串列要返回的元素

③遞迴解法:

遞迴法程式碼不會寫