题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { /** * * @param head ListNode类 * @return ListNode类 */ public ListNode deleteDuplicates (ListNode head) { if (head == null) { return head; } ListNode dummy = new ListNode(-1), cur = dummy; dummy.next = head; while (cur != null) { ListNode next = cur.next; if (next == null) { break; } ListNode nextNext = next.next; if (nextNext == null || nextNext.val != next.val) { cur = next; } else { nextNext = nextNext.next; while (nextNext != null && nextNext.val == next.val) { nextNext = nextNext.next; } cur.next = nextNext; } } return dummy.next; } } 不过,官方答案貌似更简单了: import java.util.*; public class Solution { public ListNode deleteDuplicates (ListNode head) { //空链表 if(head == null) return null; ListNode res = new ListNode(0); //在链表前加一个表头 res.next = head; ListNode cur = res; while(cur.next != null && cur.next.next != null){ //遇到相邻两个节点值相同 if(cur.next.val == cur.next.next.val){ int temp = cur.next.val; //将所有相同的都跳过 while (cur.next != null && cur.next.val == temp) cur.next = cur.next.next; } else cur = cur.next; } //返回时去掉表头 return res.next; } }#学习##刷题##每日刷题#