/**
* Copyright (C), 2018-2020
* FileName: removeDuplicateNodes0201
* Author: xjl
* Date: 2020/6/26 20:10
* Description: 編寫代碼,移除未排序鏈表中的重複節點。保留最開始出現的節點。
*/
package LinkList;
import org.junit.Test;
import java.util.ArrayList;
public class removeDuplicateNodes0201 {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public ListNode removeDuplicateNodes1(ListNode head) {
ArrayList<Integer> list = new ArrayList<>();
ListNode pre = head;
while (pre != null) {
if (!list.contains(pre.val)) {
list.add(pre.val);
}
pre = pre.next;
}
ListNode res = new ListNode(0);
ListNode pre1=res;
for (int V : list) {
pre1.next = new ListNode(V);
pre1 = pre1.next;
}
return res.next;
}
@Test
public void test() {
ListNode s1 = new ListNode(1);
ListNode s2 = new ListNode(2);
ListNode s3 = new ListNode(3);
ListNode s4 = new ListNode(3);
ListNode s5 = new ListNode(2);
ListNode s6 = new ListNode(1);
s1.next = s2;
s2.next = s3;
s3.next = s4;
s4.next = s5;
s5.next = s6;
ListNode listNode = removeDuplicateNodes1(s1);
while (listNode != null) {
System.out.println(listNode.val);
listNode = listNode.next;
}
}
}
刪除鏈表中相鄰的重複的元素
//刪除連續的重複的元素
public ListNode removeDuplicateNodes(ListNode head) {
ListNode node = new ListNode(0);
node.next = head;
ListNode curr = node;
ListNode pre = head;
curr.next = pre;
while (pre.next != null) {
if (pre.val == pre.next.val) {
curr.next = pre.next;
pre = pre.next;
continue;
}
curr = curr.next;
pre = pre.next;
}
return node.next;
}
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode node = new ListNode(0);
node.next = head;
ListNode pre = node;
ListNode curr = head;
while (curr != null) {
if (curr.next != null && curr.val == curr.next.val) {
while (curr.next != null && curr.val == curr.next.val) {
curr = curr.next;
}
curr = curr.next;
pre.next = curr;
} else {
pre = pre.next;
curr = curr.next;
}
}
return node.next;
}
}