题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
编程思路
定义四个结点,当前节点node,前结点pre,后结点next,要删除的结点ToBeDel,判断当前结点的值和后结点的值是否相等,若不相等,继续向前移动,若相等,删除该结点,即next = ToBeDel.next,ToBeDel = next;如果删除的是头结点,那么pHead = next;否则,删除以后,pre.next = next.
程序代码
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;
ListNode pre = null;
ListNode node = pHead;
while(node != null) {
ListNode next = node.next;
boolean needDelete = false;
if(next != null && next.val == node.val)
needDelete = true;
if(!needDelete) {
pre = node;
node = node.next;
} else {
int val = node.val;
ListNode ToBeDel = node;
while(ToBeDel != null && ToBeDel.val == val) {
next = ToBeDel.next;
ToBeDel = next;
}
if(pre == null)
pHead = next;
else
pre.next = next;
node = next;
}
}
return pHead;
}
}