剑指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;
  }
}


相关文章
|
8天前
|
算法
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
17 0
|
8天前
|
算法
数据结构和算法学习记录——线性表之双向链表(下)-头插函数、头删函数、查找函数、pos位置之前插入结点、pos位置删除结点及其复用、销毁链表函数
数据结构和算法学习记录——线性表之双向链表(下)-头插函数、头删函数、查找函数、pos位置之前插入结点、pos位置删除结点及其复用、销毁链表函数
9 0
|
8天前
|
算法
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
8 0
|
17天前
题目----力扣--链表的中间结点
题目----力扣--链表的中间结点
9 0
|
18天前
查找两个链表的第一个公共结点
查找两个链表的第一个公共结点
19 0
|
18天前
|
索引
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
19 0
|
23天前
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
|
4天前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
1天前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
|
4天前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表