leetcode83. Remove Duplicates from Sorted List(刪除有序連結串列中的重複項)
阿新 • • 發佈:2019-01-05
題目要求
給定一個排好順序的連結串列,刪除連結串列中的重複項。
例子
Example 1:
Input: 1->1->2
Output: 1->2
Example 2:
Input: 1->1->2->3->3
Output: 1->2->3
解題思路
和解決有序陣列中刪除重複元素leetcode 26 有序數刪除組中的重複元素的思路相似,通過遍歷比較連結串列中相鄰元素的值,若重複,則當前元素的next指向下一節點的next.
(p->next = p->next->next) 理解起來是這樣
在操作中,因為要刪除並釋放重複節點,所以也需要一個指標(nex)來存放記錄重複節點的位置,即nex = p->next。
主要程式碼c++
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode *cur =head, *nex;
while(cur && cur->next) // 連結串列為空,或者裡那表末尾時結束(避免再寫if判斷空表)
{
if(cur->val == cur->next->val) // 比較相鄰元素的值
{
nex = cur->next;
delete cur->next; //很多解答直接跳到下一節點,而不釋放節點
cur->next = nex->next;
}
else{cur = cur->next;}
}
return head;
}
};