站长工具备案查询,wordpress newsletter 插件,win2008系统做网站,设计师人才网题目链接#xff1a;力扣#xff08;LeetCode#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路#xff1a;设置一个新的哑元节点result#xff0c;作为头节点#xff0c;将head中不重复地节点依次链接到哑元节点后面#xff0c;最后返回result.next
初始值…题目链接力扣LeetCode官网 - 全球极客挚爱的技术成长平台 解题思路设置一个新的哑元节点result作为头节点将head中不重复地节点依次链接到哑元节点后面最后返回result.next
初始值 result new ListNode();prev resultcurrent headcnt 0如果current ! null则循环执行 如果 current.next!null current.next.val current.val说明节点重复 令current current.nextcnt重复节点的数量加1如果 cnt1 (current.nextnull || current.next.val ! current.val) 此时说明有重复的节点并且current已经到达最后一个重复的节点但是后面的节点还有可能会出现重复继续遍历后面的节点current current.next。cnt0重新计数continue遍历下一个节点prev.next current将当前不重复的节点链接到新链表中。prev current更新前驱curent current.nextprev.next null因为current后面可能还会有重复的节点所以prev的后继指向null断开与current后面节点的链接
AC代码
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/
class Solution {public ListNode deleteDuplicates(ListNode head) {if (head null || head.next null) {return head;}ListNode result new ListNode();ListNode prev result;ListNode current head;int cnt 0;while (current ! null) {if (current.next ! null current.next.val current.val) {current current.next;cnt;if (cnt 0 (current.next null || current.next.val ! current.val)) {current current.next;cnt 0;}continue;}prev.next current;prev current;current current.next;prev.nextnull;}return result.next;}
} 解法二在头节点前添加一个哑元节点初始时将current指向哑元节点如果后面节点有重复的就一直令current.next current.next.next丢弃中间重复的节点current.next否则令current current.next指向下一个不重复的节点
AC代码
public ListNode deleteDuplicates(ListNode head) {if (head null || head.next null) {return head;}ListNode dummy new ListNode(0, head);ListNode current dummy;while (current.next ! null current.next.next ! null) {if (current.next.val current.next.next.val) {int value current.next.val;while (current.next ! null current.next.val value) {current.next current.next.next;}} else {current current.next;}}return dummy.next;}