/* 题目要求:
* 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,
* 重复的结点不保留,返回链表头指针。
* 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
* */
题解:先判空和长度是否为一
定义两个指针和一个傀儡节点
用cur当游标遍历链表,
①当cur的值和cur.next的值相等时,prev不动,cur指向他的下一个
直到cur的值不等于cue.next 退出循环
prev.next = cur.next;
②当cur的值和cur.next的值不相等时
prev = cur;
cur = cur.next;
public ListNode deleteDuplication(ListNode pHead) {
if(pHead == null || pHead.next == null) {
return pHead;
}
ListNode head = new ListNode(0);
head.next = pHead;//傀儡节点
ListNode prev = head;// 前驱节点从傀儡节点开始
ListNode cur = head.next;//从第一个节点开始
while(cur != null) {
if(cur.next != null && cur.val == cur.next.val) {
while(cur.next != null && cur.val == cur.next.val) {
//cur和cur.next的节点值相同,就一直往后走
cur = cur.next;
}
// 不相同时,前驱指向cur的下一个;
// cur指向它的下一个
cur = cur.next;
prev.next = cur.next;
}else{
//值不相同时,prev和cur同时往后走
prev = cur;
cur = cur.next;
}
}
return head.next;
}