题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
分析过程如下图:
还有细节需要注意:
代码如下:
public ListNode deleteDuplication(ListNode pHead)
{
ListNode cur = pHead;
ListNode newHead = new ListNode(-1);
ListNode tmp = newHead;
if(cur == null || cur.next == null) {
return cur;
}
while (cur != null) {
//重复的节点
//因为要用到cur.next.val,所以这里也要判断cur.next的合法性
if(cur.next != null && cur.val == cur.next.val) {
//因为循环会使cur改变,所以每循环一次都要重新判断cur.next的合法性
while(cur.next != null && cur.val == cur.next.val) {
cur = cur.next;
}
cur = cur.next;
}else {
tmp.next = cur;
tmp = tmp.next;
cur = cur.next;
}
}
tmp.next = null;
return newHead.next;
}