删除排序链表的重复元素(Java实现)

Posted youdiaodaxue16

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除排序链表的重复元素(Java实现)相关的知识,希望对你有一定的参考价值。

1.删除排序链表的重复元素I

1.1题目:

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 1:

输入: 1->1->2
输出: 1->2

示例 2:

输入: 1->1->2->3->3
输出: 1->2->3

代码结果:

/**
 * Definition for singly-linked list.
 * public class ListNode 
 *     int val;
 *     ListNode next;
 *     ListNode(int x)  val = x; 
 * 
 */
class Solution 
    public ListNode deleteDuplicates(ListNode head) 
        
        ListNode p = head;
        
        while(p != null)
            if(p.next != null && p.val == p.next.val)
                p.next = p.next.next;
            else
                p = p.next;
            
        
        return head;
    

 

2.删除排序链表的重复元素II

2.1题目:

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 1:

输入: 1->2->3->3->4->4->5
输出: 1->2->5

示例 2:

输入: 1->1->1->2->3
输出: 2->3

 

代码结果:

/**
 * Definition for singly-linked list.
 * public class ListNode 
 *     int val;
 *     ListNode next;
 *     ListNode(int x)  val = x; 
 * 
 */
class Solution 
    public ListNode deleteDuplicates(ListNode head) 
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        
        ListNode p = head;
        ListNode q = dummy;
        boolean isDel = false;
        
        while(p != null)
            if(p.next != null && p.val == p.next.val )
                isDel = true;
                p.next = p.next.next;
            else
                p = p.next;
                if(isDel)
                    q.next = p;
                    isDel = false;
                else
                    q = q.next;
                
            
        
        return dummy.next;
    

 3.分隔链表:

3.1题目:

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。

你应当保留两个分区中每个节点的初始相对位置。

示例:

输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5

 

代码结果:

/**
 * Definition for singly-linked list.
 * public class ListNode 
 *     int val;
 *     ListNode next;
 *     ListNode(int x)  val = x; 
 * 
 */
class Solution 
    public ListNode partition(ListNode head, int x) 
        ListNode dummy1 = new ListNode(-1);
        ListNode dummy2 = new ListNode(-1);
        
        ListNode p1 = dummy1;
        ListNode p2 = dummy2;
        
       
        while(head != null)
            if(head.val < x)
                p1.next = head;
                p1 = p1.next;
            else
                p2.next = head;
                p2 = p2.next;
            
            
            head = head.next;
        
        
        p2.next = null;
        p1.next = dummy2.next;
         //dummy2.next = null;
       
        
        return dummy1.next;
    

 

以上是关于删除排序链表的重复元素(Java实现)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode Java刷题笔记—82. 删除排序链表中的重复元素 II

精选力扣500题 第44题 LeetCode 82. 删除排序链表中的重复元素 IIc++/java详细题解

精选力扣500题 第66题 LeetCode 83. 删除排序链表中的重复元素c++/java详细题解

力扣——链表题 203.移除链表元素83.删除排序链表中重复元素82.删除排序链表中重复元素Ⅱ206.反转链表 876.链表的中间节点

LeetCode-83. 删除排序链表中的重复元素(java)

Java 实现有序链表