剑指offer上的算法题目,删除链表中重复的结点。
例子:
1->2->3->3,结果1->2
例子:
1->1->1->1,结果null
例子:
1->1->1->3,结果3
分析:头结点也可能是重复的元素,因此头结点也可能被删除。此种情况下,应创建一个虚拟结点,将虚拟结点指向头结点。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
ListNode first=new ListNode(-1);
first.next=pHead;
ListNode pre=first;
ListNode p=pHead;
if(p==null||p.next==null){
return p;
}
while(p!=null&&p.next!=null){
if(p.val==p.next.val){
int val=p.val;
while(p!=null&&p.val==val){
p=p.next;
}
pre.next=p;
}else{
p=p.next;
pre=pre.next;
}
}
return first.next;
}
}