leetcode(82)---删除排序链表中的重复元素(双指针)
Posted 叶卡捷琳堡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode(82)---删除排序链表中的重复元素(双指针)相关的知识,希望对你有一定的参考价值。
题目
82.删除排序链表中的重复元素 II
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
示例 1:
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
示例 2:
输入:head = [1,1,1,2,3]
输出:[2,3]
提示:
链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序排列
题解
由于题目中可能要删除头节点,因此需要定义一个在头节点之前的节点,便于之后删除
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution
{
public ListNode deleteDuplicates(ListNode head)
{
//如果节点只有一个值,直接返回
if(head == null || head.next == null){
return head;
}
//定义指向head的节点
ListNode prehead = new ListNode(-999,head);
ListNode temp = prehead;
while(head.next != null){
if(head.val != head.next.val){
prehead = head;
head = head.next;
}
//如果两个节点的值相等
else if(head.val == head.next.val){
int val = head.val;
while(head != null && head.val == val){
if(head.val == val){
prehead.next = head.next;
head = head.next;
}
}
}
if(head == null){
break;
}
}
return temp.next;
}
}
以上是关于leetcode(82)---删除排序链表中的重复元素(双指针)的主要内容,如果未能解决你的问题,请参考以下文章