在一個排序的鏈表中,存在重複的結點,請刪除該鏈表中重複的結點,返回鏈表頭指針。
例如,鏈表1->2->3->3->4->4->5 處理後爲 1->2->3->4->5
import java.util.ArrayList;
public class DeleteDuplicateListNode {
public static ListNode deleteDuplication(ListNode pHead)
{
if(pHead == null){
return null;
}
ArrayList<Integer> list = new ArrayList<>();
list.add(pHead.val);
/**
* header指向首節點,肯定不是重複的,header一旦確定就不會改變。
* pHead此時也是不重複的,用來指向當前不重複的節點,依靠pHead在遍歷的過程建設一個不重複的節點鏈
* pHead在遍歷的過程中是變化的。經判斷當前節點current不重複時,1. 先設定pHead代表的節點的下一個不重複的節點爲current,
* 2. 重新設定pHead的指針,讓pHead指向當前不重複的節點current。
*/
ListNode header = pHead;
ListNode current = pHead.next; // current指向當前正在遍歷的節點,在遍歷時一直變化
while(current!=null){
if(list.contains(current.val)){
current = current.next;
}else{
list.add(current.val);
pHead.next = current;
pHead = current;
}
current = current.next;
}
return header;
}
public static void main(String[] args) {
ListNode node = new ListNode(1);
ListNode node1 = new ListNode(2);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(4);
ListNode node6 = new ListNode(5);
node.next=node1; node1.next=node2; node2.next=node3;
node3.next=node4; node4.next=node5; node5.next = node6;
ListNode uniqueNode = deleteDuplication(node);
while (uniqueNode != null) {
System.out.print(uniqueNode.val+"->");
uniqueNode = uniqueNode.next;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}