码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-07-18 15:19:24      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:style   link   pre   分区   ret   链表   let   false   font   

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实现)

标签:style   link   pre   分区   ret   链表   let   false   font   

原文地址:https://www.cnblogs.com/youdiaodaxue16/p/11207356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!