在一個排序的鏈表中,存在重複的結點,請刪除該鏈表中重複的結點,重複的結點不保留,返回鏈表頭指針。
例如,鏈表1->2->3->3->4->4->5 處理後爲 1->2->5
1.鏈表爲空,走人ヾ(•ω•`)o。
2.因爲是單向鏈表,故刪除節點時,掛接的時候要定義一個前驅結點。
3.判斷遍歷到的結點是否需要刪除,如果不需要刪除,直接往下遍歷就好了
4.如果需要刪除,因爲它是刪除重複的結點,那這是一個循環,刪除的時候注意將要刪除的結點置空,以防止內存泄漏!!!!
/**
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public static ListNode deleteDuplication(ListNode pHead)
{
if(pHead == null || pHead.next == null)
return pHead;
ListNode pre = null;
ListNode p = pHead;
while(p != null){
ListNode next = p.next;
boolean isDel = false;
if(next != null && p.val == next.val){
isDel = true;
}
if(!isDel){
pre = p;
p = next;
}else{
int val = p.val;
ListNode toDel = p;
while(toDel != null && toDel.val == val){
next = toDel.next;
toDel.next = null; //不要以爲該步沒有意義,目的是刪除p的內存,防止內存泄漏
toDel = next;
}
if(pre == null){
pHead = next;
}else{
pre.next = next;
}
p = next;
}
}
return pHead;
}
}