你想知道的Java删除有序链表中的重复值解法来了~


题目描述

删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次

例如:

给出的链表为1→1→2,返回1→2
给出的链表为1→1→2→3→3,返回1→2→3.


以下是本篇文章正文内容,下面案例可供参考

解题思路

  1. 定义一个新的链表用来放删除后的链表
  2. 定义cur为当前结点,因为是有序链表,相同的值都连在一起,若此结点的值与下个结点的值相同,则让其往后跑,直到不相同时,将其保存到新的链表中,以此循环,最后返回新链表
  3. 注意,为了防止出现空指针异常,判断条件中除了判断相等外,还应该加上cur.next!=null

代码如下

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        // write code here
        ListNode newHead = new ListNode(0);
        ListNode tmp = newHead;
        ListNode cur = head;
        while(cur!=null){
            if(cur.next!=null&&cur.val == cur.next.val){
                cur = cur.next;
            }
            else{
                tmp.next = cur;
                tmp = tmp.next;
                cur = cur.next;
            }
        }
        return newHead.next;
    }
}

总结

此题主要是链表的删除操作,细心注意判断条件!

如果本文对你有所帮助,要记得点赞评论哦~
若是有描述不准确的地方,欢迎大家评论区指正,一起学习~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值