leetcode 206 反轉鏈表

原地算法 

遞歸

 ListNode* head1;
    ListNode* reverseList(ListNode* head) {
        dfs(head, NULL);
        return head1;
    }
    void dfs(ListNode* cur, ListNode* pre){
        if(cur == NULL){
            head1 = pre;
            return;
        }
        ListNode* tmp = cur->next;
        cur->next = pre; 
        dfs(tmp, cur);
    }

循環 

 ListNode* reverseList(ListNode* head) {
        ListNode* prev = NULL; //前指針節點
        ListNode* curr = head; //當前指針節點
        //每次循環,都將當前節點指向它前面的節點,然後當前節點和前節點後移
        while (curr != NULL) {
            ListNode* nextTemp = curr->next; //臨時節點,暫存當前節點的下一節點,用於後移
            curr->next = prev; //將當前節點指向它前面的節點
            prev = curr; //前指針後移
            curr = nextTemp; //當前指針後移
        }
        return prev;

 

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