zoukankan      html  css  js  c++  java
  • [leetCode]83.删除排序链表中的重复元素

    在这里插入图片描述

    解法一 双指针

    思路:跟删除排序数组相同元素想法一致,想到的是使用双指针,一个慢指针i,一个快指针j

    • 首先i指向链表头部,j指向i的下一个元素
    • 如果j元素的值等于i元素的值则跳过重复元素j = j.next,否则不用跳过该元素
    • 每次内循环结束(跳过相同元素结束)使i.next = j;i=i.next,下一遍外循环又会使j指向i的下一个元素进入内循环进行比较。
    /**
     * 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 i = head;
            while(i!=null){
                ListNode j = i.next;
                while(j != null && j.val == i.val){
                    j = j.next;
                }
                i.next = j;
                i = i.next;
            }
            return head;
        }
    }
    

    解法二 单指针

    使用一个指针current指向当前元素,比较后一个元素与前一个元素是否相等

    • 相等则使current.next指向后一个元素的后一个元素
    • 不等则移动指针:current = current.next
    /**
     * 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 current = head;
            while(current != null && current.next !=null){
                if(current.val == current.next.val){
                    current.next = current.next.next;
                }else{
                    current = current.next;
                }
            }
            return head;
        }
    }
    
  • 相关阅读:
    多线程案例龟兔赛跑
    不靠谱的事
    生命的价值并不止于自己的幸福
    我的高中搞笑班主任
    AgileChina参会笔记
    上美食
    程序中保留一个Dump
    骗子公司驾到
    我的《野蛮生长》书摘
    最近看的书的清单
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860017.html
Copyright © 2011-2022 走看看