題目描述:
在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理后為 1->2->5。
解題思路:
關於鏈表的大多數題目還是比較簡單的,本題也並不太難。
刪除重復結點,也就是如果當前結點和下一個結點的值相同,那么就是重復的結點,都可以被刪除,為了保證刪除之后的鏈表的連通性,在刪除之后,要把當前結點前面的結點和下一個沒有重復的結點鏈接起來,為此,程序需要記錄當前的最后一個不重復結點,即程序中的pre。重點在於:一定要確保當前鏈接到鏈表中的一定是不會再重復的結點,具體見代碼實現。
關於第一個結點如果重復怎么辦的問題,我們不用單獨考慮,可以使用鏈表中一貫的做法,加一個頭結點即可。
具體思路看代碼比較直觀,參考如下的代碼實現。
舉例:

編程實現(Java):
/*
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 || pHead.next==null)
return pHead;
ListNode head=new ListNode(-1); //添加頭結點
head.next=pHead;
ListNode last=head,cur=pHead;
while(cur!=null && cur.next!=null){
if(cur.val!=cur.next.val){
last=cur;
cur=cur.next;
}else{
int val=cur.val;
while(cur!=null && cur.val==val)
cur=cur.next;
last.next=cur;
}
}
return head.next;
}
}