剑指offer T29 排序的循环链表

该博客主要讨论了如何在一个已排序的循环链表中插入新节点。提供的Java代码实现了一个`insert`方法,该方法根据链表的当前状态(空、只有一个元素或多个元素)进行不同操作,确保插入后链表依然保持排序。`insertCore`方法通过遍历寻找合适的位置,并更新链表结构来完成插入操作。
摘要由CSDN通过智能技术生成

在这里插入图片描述

package 剑指offer.链表;

public class t29排序的循环链表 {
    public ListNode insert(ListNode head, int insertVal) {
        ListNode listNode = new ListNode(insertVal);
        //只有自己一个节点时候
        if (head == null) {
            head = listNode;
            head.next = head;
        }
        //只有一个元素
        else if (head.next == head) {
            head.next = listNode;
            listNode.next = head;
        }
        //执行第三种情况
        else {
            insertCore(head, listNode);
        }
        return head;
    }

    /**
     *
     * @param head
     * @param listNode
     */
    private void insertCore(ListNode head, ListNode listNode) {
        ListNode cur = head;
        ListNode next = head.next;
        ListNode biggest = head;
        //如果不是前节点比比自己小,后节点比自己大的情况
        //说明没有找到,一直遍历(next==head 是终点)
        while (!(cur.val <= listNode.val && next.val >= listNode.val) && next != head) {
            //指针后移
            cur = next;
            next = next.next;
            //
            if (cur.val >= biggest.val) {
                biggest = cur;
            }
        }
        //第一种情况
        if (cur.val <= listNode.val && next.val >= listNode.val) {
            cur.next = listNode;
            listNode.next = next;
        }
        //第二种情况
        else {
            listNode.next = biggest.next;
            biggest.next = listNode;
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你们卷的我睡不着QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值