删除该链表中重复的结点

mac2024-03-18  23

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,返回链表头指针。

例如,链表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; } }

 

最新回复(0)