移除重複節點Java版(力扣)
阿新 • • 發佈:2021-01-07
技術標籤: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