题解 | #删除链表中重复的结点#
删除链表中重复的结点
https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ public class Solution { public ListNode deleteDuplication(ListNode pHead) { if (pHead == null) { return pHead; } // 构建新链表头节点 ListNode newHead = new ListNode(0); // 将新链表的头节点指向原有链表 newHead.next = pHead; // 对链表进行遍历 ListNode curNode = newHead; // 判断当前节点的下一个节点和下下一个集诶单是否为空,如果不为空则进行遍历 while(curNode.next != null && curNode.next.next != null){ // 如果下一个节点的值等于下下一个节点,则将当前节点的指针后移至与下一个节点值不同的节点 if(curNode.next.val == curNode.next.next.val){ int theSameValue = curNode.next.val; while(curNode.next != null && curNode.next.val == theSameValue){ // 后移当前节点的指针 curNode.next = curNode.next.next; } }else{// 遍历下一个节点 curNode = curNode.next; } } return newHead.next; } }
整体思路:
给链表增加一个头节点,遍历整个链表,遍历过程中:
- 如果当前节点的下一个节点和下下一个节点值一致()
- 保存当前节点的下一个节点值为theSameValue
- 依次判断后续节点是否与theSameValue一致while(curNode.next != null && curNode.next.val == theSameValue)
- 一致
- 将当前节点的指针后移curNode.next = curNode.next.next;
- 不一致
- 不做处理
- 结果
- 该判断结束后,会将当前节点指向不与当前节点的下一个节点值不一致的节点
- 如果当前节点的下一个节点和下下一个节点值不一致
- 遍历下一个节点curNode = curNode.next;