原题链接
描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
例如,
链表1->2->3->3->4->4->5 处理后为 1->2->5。
示例1
输入:{1,2,3,3,4,4,5}
返回值:{1,2,5}
思路
乍一看以为很简单的,但是做的过程还是遇到以下都问题:
- 去除重复结点时会保留最后一个重复结点
- 更新链表后没办法保存,因为只创建一个cur进行操作,最后cur指向的是null。
不过都已经得到了解决,主要思路就是创建一个附加头节点,然后再创建一个始终指向该节点的头节点,后面跟的都是不重复的结点,然后检测重复,如果重复,一直向下走到不相等的结点。
解答
public class Solution {
public static ListNode deleteDuplication(ListNode pHead) {
ListNode cur = pHead;
ListNode pre = new ListNode(-1);
pre.next= null;
ListNode res = pre;
while(cur != null){
if(cur.next != null && cur.val == cur.next.val){
int tmp = cur.val;
while(cur!= null && cur.val==tmp){
cur = cur.next;
}
pre.next = cur;
}
else{
pre.next = cur;
cur = cur.next;
pre = pre.next;
}
}
return res.next;
}
}