删除该链表中重复的结点,重复的结点不保留

mac2024-03-31  29

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

 

import java.util.ArrayList; public class RemoveDuplicatedListNode { public static ListNode deleteDuplication(ListNode pHead) { if(pHead == null){ return null; } ListNode current = pHead; ListNode header = null; ArrayList<Integer> intList = new ArrayList<>(); ArrayList<ListNode> nodeList = new ArrayList<>(); while(current!=null) { Integer num = current.val; if(intList.contains(num)){ // 删除List中重复的结点,重复的结点不做保留 for(int i=0; i<nodeList.size(); i++){ ListNode node1 = nodeList.get(i); if(node1.val == num){ nodeList.remove(node1); i--; } } }else{ intList.add(current.val); nodeList.add(current); } current = current.next; } int size = nodeList.size(); if(size>0){ for(int i=0; i<size; i++){ if(i == size-1){ // 将list中最后一个节点的next指针设置为null nodeList.get(i).next = null; }else{ // 将list中的节点建设为链表关系 nodeList.get(i).next = nodeList.get(i+1); } } // 新的链表建立完成,让node指向第一个节点 header = nodeList.get(0); } return header; } // 进行测试,结果 2->4-> public static void main(String[] args) { ListNode node = new ListNode(1); ListNode node1 = new ListNode(1); ListNode node2 = new ListNode(2); ListNode node3 = new ListNode(3); ListNode node4 = new ListNode(3); ListNode node5 = new ListNode(4); ListNode node6 = new ListNode(5); ListNode node7 = new ListNode(5); node.next=node1; node1.next=node2; node2.next=node3; node3.next=node4; node4.next=node5; node5.next = node6; node6.next=node7; 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; } }

 

 

 

最新回复(0)