本文主要是介绍leetcode82-Remove Duplicates from Sorted List II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
示例 1:
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
分析
要删除重复元素肯定要有一个结点标示被删除元素的前驱,所以还是用一个哨兵结点next指向头结点,然后遍历链表即可。用cur指针指向链表的头结点,然后不断比较cur和她的next结点的值是否一样,如果一样则不断后移cur,最终比较哨兵结点的next是否是cur,如果不是则说明中间的元素值都一样直接更新哨兵的 next指针为cur的next,如果是的话则说明相邻俩个元素值不一样,那么后移哨兵结点继续遍历即可
public class LinkNode {int val;LinkNode next;public LinkNode(int data) {this.val = data;this.next = null;}
}
public class LinkList {LinkNode head;public LinkList() {this.head = null;}public LinkNode getHead() {return this.head;}//添加元素public void addNode(int data) {LinkNode node = new LinkNode(data);if (this.head == null) {this.head = node;} else {LinkNode cur = this.head;while(cur.next != null) {cur = cur.next;}cur.next = node;}}//正序打印public void print(LinkNode node) {while(node != null) {System.out.print(node.val);System.out.print(" ");node = node.next;}System.out.println();}public void removeDup() {LinkNode dummy = new LinkNode(-1);dummy.next = this.head;LinkNode p = dummy;while(p.next != null) {LinkNode cur = p.next;while(cur.next != null && cur.val == cur.next.val) {cur = cur.next;}if(p.next == cur) {p = p.next;} else {p.next = cur.next;}}print(dummy.next);}
}
public class removeDuplicatesfromSortedListII {public static void main(String[] args) {LinkList list = new LinkList();list.addNode(1);list.addNode(2);list.addNode(3);list.addNode(3);list.addNode(4);list.addNode(4);list.addNode(5);list.removeDup();}
}
这篇关于leetcode82-Remove Duplicates from Sorted List II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!