题目:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
题解:
设置两个节点,一个节点用于遍历,另一个节点保存重复节点第一次出现时的位置。遇到一个节点时循环遍历后面节点,如果没有重复节点,两个结点都往前走,有重复节点直到不重复为止删除重复结点。
代码:
public
static
ListNode deleteDuplication(ListNode pHead) {
ListNode first =
new
ListNode(-
1
);
//设置一个trick
first.next = pHead;
ListNode p = pHead;
ListNode last = first;
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;
last.next = p;//删除重复结点
}
else
{
last = p;
p = p.next;
}
}
return
first.next;
}