题解 | #删除链表中重复的结点#

删除链表中重复的结点

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;

全部评论

相关推荐

爱读书的放鸽子能手很...:刷个两端实习,冲春招,流水线什么时候不能去
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务