题目描述:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字,今天小编就来说说关于leetcode中最长有效的括号?下面更多详细答案一起来看看吧!

leetcode中最长有效的括号(LeetCode-082-删除排序链表中的重复元素)

leetcode中最长有效的括号

删除排序链表中的重复元素 II

题目描述:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。

返回同样按升序排列的结果链表。

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:链表遍历

首先,声明一个新的链表头结点newHead,last指向新的头结点newHead,cur指向老的头结点head,然后遍历链表head,遍历过程如下:

  • 声明一个boolean变量isRepeated来标识当前节点是否是重复节点;
  • 声明next为cur的next节点,通过循环过程找到下一个跟cur节点的数字不同的节点,并且判断当前节点是否是重复的并更新isRepeated;
  • 如果isRepeated为true,说明当前节点是重复的,则跳过这个重复节点,然后处理下一个节点;
  • 如果isRepeated为false,说明后面的节点没有和当前节点相同的,将当前节点加入到last的next节点中,然后处理下一个节点。

最后返回newHead的next节点即为结果。

public class LeetCode_082 { public static ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) { return head; } ListNode newHead = new ListNode(-1); ListNode last = newHead, cur = head; while (cur != null) { // 当前节点是否是重复的标识 boolean isRepeated = false; ListNode next = cur.next; // 找到下一个跟cur节点的数字不同的节点,并且判断当前节点是否是重复的 while (next != null && next.val == cur.val) { isRepeated = true; next = next.next; } if (isRepeated) { // 如果当前节点是重复的,则跳过这个重复节点 cur = next; } else { // 如果当前节点不是重复的,则作为last的下一个节点 last.next = new ListNode(cur.val); last = last.next; cur = next; } } return newHead.next; } public static void main(String[] args) { ListNode head = new ListNode(1); head.next = new ListNode(2); head.next.next = new ListNode(2); ListNode result = deleteDuplicates(head); while (result != null) { System.out.print(result.val " "); result = result.next; } } }

【每日寄语】 你若等待,清风自来。等待可能是一阵风,等待的有可能是一个机会,等待的有可能是一个人,但你终归你得等,你不等,那个风是不会来的。

,