02.01. 移除重複節點
阿新 • • 發佈:2022-02-25
02.01. 移除重複節點——java解法
02.01. 移除重複節點
1、題目
編寫程式碼,移除未排序連結串列中的重複節點。保留最開始出現的節點。
1)示例1
輸入:[1, 2, 3, 3, 2, 1]
輸出:[1, 2, 3]
2)示例2
輸入:[1, 1, 1, 1, 2]
輸出:[1, 2]
2、初步作答
2.1 思路
- 建立集合儲存節點中首次出現的整數
- 比較節點數值是否已存在於集合中,已存在直接刪除節點,不存在直接存入集合
2.2 做法
- 判斷連結串列頭結點是否為空,為空直接返回頭結點
- 建立一個 Set 集合
- 比較節點數值是否已存在於集合中,已存在直接刪除節點,不存在直接存入集合
- 返回頭結點
2.3 程式碼
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode removeDuplicateNodes(ListNode head) { if(head == null){ return head; } Set<Integer> a = new HashSet<Integer>(); a.add(head.val); ListNode list = head; while(list.next != null){ if(a.add(list.next.val)){ list = list.next; }else{ list.next = list.next.next; } } list.next = null; return head; } }
2.4 思考
因為連結串列的這道題特地去看了一下集合還有連結串列,發現集合真香
3、其餘解法
- 來自力扣作者:jyd
class Solution { public ListNode removeDuplicateNodes(ListNode head) { ListNode pre = null, cur = head; HashSet<Integer> visited = new HashSet<>(); while (cur != null) { if (visited.contains(cur.val)) { pre.next = cur.next; } else { visited.add(cur.val); pre = cur; } cur = cur.next; } return head; } }