题目:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:
1.用p表示当前节点,用pre表示之前一个节点
2.若p 与p.next节点值相等,则p向前移动一位;
3.若p与p.next节点不相等,分两种情况考虑
(1)p与pre相邻,说明没有遇到重复,p与pre均 向前移动一位
(2)若不相邻,说明遇到重复,pre直接连接p的下一个节点,然后p重新定位
代码:
/*
public class ListNode
{
public int val;
public ListNode next;
public ListNode (int x)
{
val = x;
}
}*/
class Solution
{
public ListNode deleteDuplication(ListNode pHead)
{
// write code here
if(pHead == null)
return null;
ListNode pre = new ListNode(0);
pre.next = pHead;
ListNode p = pHead;
pHead = pre;
while(p.next != null)
{
if(p.val == p.next.val)
{
p = p.next;
}
else
{
if(pre.next == p)
{
pre = p;
p = p.next;
}
else
{
pre.next = p.next;
p = pre.next;
}
}
}
if(pre.next != p)
pre.next =null;
return pHead.next;
}
}