思路:遍历链表,定义一个快指针和一个慢指针。若快指针上的节点与慢指针上的相同,则将块指针上的节点删除,慢指针不动,快指针向后移动一位。若不相同,则都向后移动一位,进行遍历。(如此循环即可,最后返回head)
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 || head.next == null) return head; ListNode pre = head; ListNode cur = pre.next; ListNode next = null; // 存储cur的下一节点 while(cur != null){ if(pre.val == cur.val){//说明当前节点与上一节点重复 //将当前节点删除 next = cur.next; //保存当前节点的下一节点 pre.next = cur.next; cur = next; }else{ pre = pre.next; cur = cur.next; } } return head; } }