1. 程式人生 > 其它 >移除重複節點Java版(力扣)

移除重複節點Java版(力扣)

技術標籤:LeetCodeleetcodejavaset連結串列

移除重複節點

編寫程式碼,移除未排序連結串列中的重複節點。保留最開始出現的節點。

示例1:
輸入:[1, 2, 3, 3, 2, 1]
輸出:[1, 2, 3]

示例2:
輸入:[1, 1, 1, 1, 2]
輸出:[1, 2]

提示:
連結串列長度在[0, 20000]範圍內。
連結串列元素在[0, 20000]範圍內。

題意:就是讓我們去除單鏈表中的重複節點,只保留第一個。

思路:遞迴求解,用一個set存放節點的值,如果這個節點的值沒出現過就存放到set中,保留當前節點;如果這個節點的值出現過就捨棄當前節點。

程式碼:

class Solution01061
{ private Set<Integer> set =new HashSet<Integer>(); public ListNode removeDuplicateNodes(ListNode head) { if(head==null) //說明到了連結串列尾端 return null; if(!set.contains(head.val)){ //這個值第一次出現 set.add(head.val); //set中加入這個值,用於下次判斷 //只要這個連結串列不是空的,那麼第一次經過if時的第一個節點就會儲存下來,所以只要這個連結串列不是空的,至少會有一個節點
//這句相當於保留了這個節點,然後往後面掛下一個符合要求的節點 head.next=removeDuplicateNodes(head.next); // 這句就相當於保留了當前節點 return head; }else{ //這個值出現過了 // 不要當前節點,直接對下一個節點驗證 return removeDuplicateNodes(head.next); } } }

完整程式碼(含測試樣例):

package com.
Keafmd.day0106; import java.util.HashSet; import java.util.Set; /** * Keafmd * * @ClassName: RemoveDuplicateNode * @Description: 移除重複節點 https://leetcode-cn.com/problems/remove-duplicate-node-lcci/ * @author: 牛哄哄的柯南 * @date: 2021-01-06 19:31 */ public class RemoveDuplicateNode { public static void main(String[] args) { Solution solution = new Solution(); ListNode listNode1 = new ListNode(1); ListNode listNode2 = new ListNode(2); ListNode listNode3 = new ListNode(3); ListNode listNode4 = new ListNode(3); ListNode listNode5 = new ListNode(2); ListNode listNode6 = new ListNode(1); ListNode listNode7 = new ListNode(1); listNode1.next = listNode2; listNode2.next = listNode3; listNode3.next = listNode4; listNode4.next = listNode5; listNode5.next = listNode6; listNode6.next = listNode7; ListNode result = solution.removeDuplicateNodes(listNode1); System.out.println(result.val); System.out.println(result.next.val); } } class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } class Solution { private Set<Integer> set =new HashSet<Integer>(); public ListNode removeDuplicateNodes(ListNode head) { if(head==null) //說明到了連結串列尾端 return null; if(!set.contains(head.val)){ //這個值第一次出現 set.add(head.val); //set中加入這個值,用於下次判斷 //只要這個連結串列不是空的,那麼第一次經過if時的第一個節點就會儲存下來,所以只要這個連結串列不是空的,至少會有一個節點 //這句相當於保留了這個節點,然後往後面掛下一個符合要求的節點 head.next=removeDuplicateNodes(head.next); // 這句就相當於保留了當前節點 return head; }else{ //這個值出現過了 // 不要當前節點,直接對下一個節點驗證 return removeDuplicateNodes(head.next); } } }

測試結果:

1
2

Process finished with exit code 0


看完如果對你有幫助,感謝點贊支援!
如果你是電腦端,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]

在這裡插入圖片描述
加油!

共同努力!

Keafmd