在一個排序的鏈表中,存在重復的結點,請洗掉該鏈表中重復的結點,重復的結點不保留,回傳鏈表頭指標, 例如,鏈表 1->2->3->3->4->4->5 處理后為 1->2->5
解題思路
注意題目給出的條件:排序的鏈表,因此如果存在重復結點,那么一定是連續的,根據上述條件,我們可以設定雙指標,如果遇到重復結點,一個指標保存當前位置,另一個往前走,直到走完該段重復指標為止
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
if (pHead == null || pHead.next == null) {
return pHead;
}
ListNode head = new ListNode(0);
head.next = pHead;
// 當前結點的前一個結點
ListNode pre = head;
// 當前結點
ListNode node= head.next;
while(node != null){
// 當前結點與其下一個結點重復
if(node.next != null && node.val == node.next.val){
// 則指標一直向移動
while(node.next != null && node.val == node.next.val){
node = node.next;
}
// 改變前后指標各自指向的結點
pre.next = node.next;
node = node.next;
}else{
pre = pre.next;
node = node.next;
}
}
return head.next;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236431.html
標籤:其他
下一篇:二叉樹的下一個結點
