题目
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
为了避免出现头结点也重复 导致删除头结点的现象
在头节点之前设置一个辅助节点
用快慢指针的方法
相同的时候 快指针一直走
不相同的时候 慢指针指向快指针指的节点
实现删除
代码
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
//牛客网输入 输出的时候是带头结点的
//比如例子中的1就是头结点
//所以 11112 的话应该返回2 但如果返回头结点的话 又会带着头结点1 输出为1 2,没有把重复的头结点删除
{ //为了避免头结点值重复的的情况 建立辅助节点 直接略过头结点判断值
ListNode head = new ListNode(0);
head.next = pHead;
ListNode cur = pHead;
ListNode pre = head;
while(cur != null){
if(cur.next != null && cur.next.val == cur.val){
while(cur.next != null && cur.next.val == cur.val){
cur = cur.next;
}
//退出循环 cur指向的还是重复值 所以先后移
cur = cur.next;
//pre 连接新节点
pre.next = cur;
}else{
pre = cur;
cur = cur.next;
}
}
return head.next;
}
}