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


相关文章
|
21天前
19 删除链表的倒数第 N 个结点
19 删除链表的倒数第 N 个结点
|
1月前
《剑指offer》——合并两个排序的链表
《剑指offer》——合并两个排序的链表
|
1月前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
1月前
|
算法 安全 数据处理
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
数据结构|双向链表|带头结点|头插|尾插|尾删|头删
数据结构|双向链表|带头结点|头插|尾插|尾删|头删
|
1月前
《剑指offer》——从尾到头打印链表
《剑指offer》——从尾到头打印链表
|
1月前
LeetCode刷题---876. 链表的中间结点(快慢指针)
LeetCode刷题---876. 链表的中间结点(快慢指针)
|
1月前
|
C语言
反转链表、链表的中间结点、合并两个有序链表【LeetCode刷题日志】
反转链表、链表的中间结点、合并两个有序链表【LeetCode刷题日志】
|
2月前
|
算法
《剑指offer》之从“尾到头打印链表”题解
《剑指offer》之从“尾到头打印链表”题解
14 2
|
2月前
|
存储 算法
头歌【第2关:有序单链表中值相同的多余结点的删除操作】
头歌【第2关:有序单链表中值相同的多余结点的删除操作】
41 0