import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ public ListNode deleteDuplicates (ListNode head) { // write code here // 解题思路: // 1.判断head == null || head.next == null,则返回head,因为最多一个节点不可能重复, // 增加一个虚节点root // 2.采用双指针,cur = head 和 next = head.next,val = cur.val // 3.遍历链表,如果val == next.val,则说明值相同,则将next往后面移动,next = next.next // 4.如果不相等,则cur.next = next;cur = next;val = next.val;next = next.next // 5.遍历完链表,记得将cur.next 指向null,因为很可能后面的都相同 if (head == null || head.next == null) { return head; } ListNode root = new ListNode(-1); root.next = head; ListNode cur = head; ListNode next = cur.next; int val = cur.val; while (next != null) { if (val == next.val) { next = next.next; } else { cur.next = next; cur = next; val = next.val; next = next.next; } } cur.next = next; return root.next; } }