這幾天刷了些鍊錶的題目,大家不要害怕鍊錶的指標出錯,只要仔細分析幾種會出現的情況,對每一種情況指標該如何移動搞清楚,就不會有問題。在解題的時候要利用雙指標,三指標甚至4指標同時移動操作,並且有的時候可以利用雙指標間距為k來反向遍歷。例如:利用一次遍歷刪除倒數第k個節點等等。給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。
示例 1:
輸入: 1->1->2輸出: 1->2
示例 2:
輸入: 1->1->2->3->3輸出: 1->2->3
【思路】
leetcode上有兩題刪除重複數字,且是鍊錶結構。這題比較簡單,我們只需要用兩個指標遍歷一邊鍊錶即可,例如first和tmp,tmp所指內容和first比較,如果相等,將tmp節點刪除。不相等時,兩個指標同時向後移動,直到tmp為空。
/**
* definition for singly-linked list.
* struct listnode ;
*/struct listnode* deleteduplicates(struct listnode* head)
else
tmp=tmp->next;
}return head;
}
給定乙個排序鍊錶,刪除所有含有重複數字的節點,只保留原始鍊錶中 沒有重複出現 的數字。
示例 1:
輸入: 1->2->3->3->4->4->5示例 2:輸出: 1->2->5
輸入: 1->1->1->2->3輸出: 2->3
【思路】
和上一題不同的是,這一題只要是重複資料,全部刪除。依然可以按照上面的思路,重複數字刪除只剩下乙個,現在我們需要flag來記錄這個數字是否為重複數字,如果是的話,分情況討論刪除重複數字的最後乙個即可。並且此時需要記錄非重複鍊錶的最後乙個節點end。
/**
* definition for singly-linked list.
* struct listnode ;
*/struct listnode* deleteduplicates(struct listnode* head)
end->next=tmp->next;flag=0;}}
elseelse
flag=0;
}else
}tmp=tmp->next;
}return head;
}
leetcode(簡單) 刪除排序鍊錶中的重複元素
我覺得我還是要注重一下時間的複雜度,不然怎麼叫搞演算法。題目 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1 輸入 1 1 2 輸出 1 2 示例 2 輸入 1 1 2 3 3 輸出 1 2 3思路解答 這個題是乙個已經排好序的鍊錶了,所以只需要挨個比較刪除就好了。不需要整個...
LeetCode 83 刪除排序鍊錶中的重複元素
給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。definition for singly linked list.struct listnode struct listnode deleteducurrent nodelicates struct listnode head 示例 1...
LeetCode 83 刪除排序鍊錶中的重複元素
題目描述 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 輸入 1 1 2 輸出 1 2輸入 1 1 2 3 3 輸出 1 2 3解題思路 直接判斷下個節點的val是否與當前節點相同,相同則刪除,不同則將向後移。ac definition for singly linked li...