删除链表中重复的节点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路分析
因为存在删除操作,所以首先考虑双指针,保留被删节点的前一个节点,另一个节点找到被删节点的后一个节点,需要注意被删节点为头结点。代码如下:
public ListNode deleteDuplication(ListNode pHead){
if (pHead==null||pHead.next==null)return pHead;
ListNode head=new ListNode(0);//考虑到头结点可能被删的情况
head.next=pHead;
ListNode preNode=head,node=head.next;
while (node!=null&&node.next!=null){
if (node.val==node.next.val){
int val=node.val;
while (node!=null&&node.val==val){
node=node.next;
}
preNode.next=node;
}else {
preNode=node;
node=node.next;
}
}
return head.next;
}