題目:給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。
示例 1:輸入: 1->1->2 輸出: 1->2
示例 2:以下是leetcode**片段:輸入: 1->1->2->3->3 輸出: 1->2->3
/**
* definition for singly-linked list.
* public class listnode
* }*/class
solution
listnode front,behind;
//定義listnode型別的快慢指標;
front = head;
//兩個指標一開始都指向頭結點
behind = head;
while
(behind != null)
//如果快慢指標所指的val值不同,則將慢指標的next指向快指標所指的位置,並且慢指標改為front.next(移動慢指標front的位置);
else
} front.next = null;
return head;
}}
注:
對下面**做出解釋:
front.next = null;
如果最後乙個元素和倒數第二個元素相等,由於下列**語句
if
(front.val == behind.val)
導致最後倆個元素並沒有進行去重處理,致使最後結果輸出仍有重複元素(結尾兩個元素),所以,讓 front.next = null; 避免了上述沒有去重的現象;
即使結尾兩個資料不相等,次語句也不影響結果,也可以適用。
但此語句的新增,導致了需要在開頭對傳進來的鍊錶為null的情況另作處理,即**:
if
(head == null)
因為如果是空,則語句front.next = null;則報錯,原因是null不是結點型別,所以沒有next一說,所以也不存在 front.next = null。
下面是idea全部**:
public
class
deleteduplicates
}public
static listnode deleteduplicates
(listnode head)
listnode front,behind;
front = head;
behind = head;
while
(behind != null)
else
} front.next = null;
return head;
}}
刪除排序鍊錶中重複元素
示例 1 輸入 1 2 3 3 4 4 5 輸出 1 2 5 示例 2 輸入 1 1 1 2 3 輸出 2 3 照例使用三個指標來 struct listnode deleteduplicates struct listnode head else 沒有重複的就正常移動 示例 1 輸入 1 1 2 ...
刪除排序鍊錶中的重複元素
給定乙個排序鍊錶,刪除所有重複的元素每個元素只留下乙個。樣例 給出 1 1 2 null,返回 1 2 null 給出 1 1 2 3 3 null,返回 1 2 3 null 加乙個頭結點 鍊錶有序,找到不相等的時候,刪除中間結點 兩兩比較是否相同進行刪除 definition for listn...
刪除排序鍊錶中的重複元素
題目 刪除排序鍊錶中的重複元素。給定乙個排序鍊錶,刪除所有重複的元素每個元素只留下乙個。樣例 給出1 1 2 null,返回1 2 null 給出1 1 2 3 3 null,返回1 2 3 null 思路 該題所給的鍊錶是有序的鍊錶,這大大降低了該題的難度,所以只要再定義乙個指標p,固定head,...