牛客網做題鏈接:https://www.nowcoder.com/questionTerminal/fc533c45b73a41b0b44ccba763f866ef
在一個排序的鏈表中,存在重複的結點,請刪除該鏈表中重複的結點,重複的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理後爲 1->2->5。
請注意,這裏是重複節點不保留!!!
代碼
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
// 鏈表爲空,直接返回
if(pHead == null)
return null;
// 鏈表只有一個節點,返回
if(pHead.next == null)
return pHead;
// 節點的個數大於等於2
// 帶頭節點的鏈表便於後面的操作
ListNode newHead = new ListNode(0);
ListNode end = newHead; // 哨兵,標記新鏈表的尾部
newHead.next = pHead;
ListNode p = pHead;
ListNode q = pHead.next;
while(q != null){
// 遇到重複節點
if(q.val == p.val){
// 找到所有與重複節點相同的節點
while(q != null && q.val == p.val){
q = q.next;
}
// 找到第一個與重複節點不相同的節點
p = q;
end.next = p;
if(q == null){
break;
}
else{
q = q.next;
}
}
else{
end = p;
p = q;
q = q.next;
}
}
return newHead.next;
}
}
牛客網在線oj: