剑指offer_链表---删除链表中重复的结点

简介: 剑指offer_链表---删除链表中重复的结点

##题目描述

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

##解题思路

1, 设置firstNode节点,防止1–1—1–1—1这种状况出现null指针

2,遇到连续的相同值,让pre指向最后一个相同值的下一个。

3,非相同值,指针顺序移位即可

##代码实现

/**
 * 
 */
package 链表;
/**
 * <p>
 * Title:DeleteDuplication
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月23日 上午10:08:06
 */
public class DeleteDuplication {
  public ListNode deleteDuplication(ListNode pHead) {
    if (pHead == null) {
      return null;
    }
    ListNode firstNode = new ListNode(-1);
    firstNode.next = pHead;
    ListNode pre = firstNode;
    ListNode p = pHead;
    while (p != null && p.next != null) {    //条件定义的时候,如果函数体里需要做判断,就得加非空,赋值不用
      if (p.val == p.next.val) {   //与相邻点有相同值
        int val = p.val;
        while (p != null && val == p.val) {  //连续相同值
          p = p.next;
        }
        pre.next = p;
      }else{
        pre = p;
        p=p.next;
      }
    }
    return firstNode.next;
  }
}


相关文章
|
2月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
71 1
|
1月前
|
存储 算法 搜索推荐
链表的中间结点
【10月更文挑战第24天】链表的中间结点是链表操作中的一个重要概念,通过快慢指针法等方法可以高效地找到它。中间结点在数据分割、平衡检测、算法应用等方面都有着重要的意义。在实际编程中,理解和掌握寻找中间结点的方法对于解决链表相关问题具有重要价值。
20 1
|
3月前
链表的中间结点
链表的中间结点
181 57
|
2月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
54 0
|
2月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
17 0
|
4月前
|
算法
LeetCode第19题删除链表的倒数第 N 个结点
该文章介绍了 LeetCode 第 19 题删除链表的倒数第 N 个结点的解法,通过使用快慢双指针,先将快指针移动 n 步,然后快慢指针一起遍历,直到快指针到达链尾,从而找到倒数第 N 个结点的前一个结点进行删除,同时总结了快慢指针可减少链表遍历次数的特点。
LeetCode第19题删除链表的倒数第 N 个结点
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
54 5
|
4月前
【刷题记录】链表的中间结点
【刷题记录】链表的中间结点
|
6月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
6月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表