leetcode-剑指 Offer II 029. 排序的循环链表

简介: 链表只有一个头结点,则新结点插入到头结点前后都可以。

766d46c0a8874a70bfe830f3e1293c0a.png

a2f48d109c4e417ea64e62ab269e9e0b.png


思路


1.链表为空时,需要新建一个链表返回。


2.链表只有一个头结点,则新结点插入到头结点前后都可以。


3.查询链表中按照有序来进行分类讨论,curr和next指向第一个结点和第二个结点, 比如链表序列是5 7 1 3

- 我要插入6或2,则只需要判断insertVal >= curr.Val && insertVal <= next.Val

- 我要插入8或者0,则需要判断在curr.Val > next.Val的情况下insertVal > curr.Val || insertVal < next.Val

- 我要插入4,则前面两个条件都不匹配,最后自然会将curr指向最后一个结点,我在循环结束后,将他插入到curr.next上


代码实现


func insert(head *Node, insertVal int) *Node {
    node := &Node{Val: insertVal}
    //链表为空
    if head == nil {
        node.Next = node
        return node
    }
    //链表只有一个结点
    if head.Next == head {
        head.Next = node
        node.Next = head
        return head
    }
    curr, next := head, head.Next
    for next != head{
        if insertVal >= curr.Val && insertVal <= next.Val{
            break
        }
        if curr.Val > next.Val{
            if insertVal > curr.Val || insertVal < next.Val{
                break
            }
        }
        curr = curr.Next
        next = next.Next
    }
    curr.Next = node
    node.Next = next
    return head
}

81fd87fe60974664b87b06cb068cbcd1.png

目录
相关文章
|
5小时前
|
Java C语言
剑指offer(牛客)——合并两个排序的链表
剑指offer(牛客)——合并两个排序的链表
8 1
|
5小时前
|
存储 Java C语言
剑指offer(牛客)——从尾到头打印链表
剑指offer(牛客)——从尾到头打印链表
10 1
|
5小时前
|
索引
每日一题:力扣328. 奇偶链表
每日一题:力扣328. 奇偶链表
13 4
|
5小时前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
10 0
|
5小时前
【每日一题】LeetCode——反转链表
【每日一题】LeetCode——反转链表
|
5小时前
【每日一题】LeetCode——链表的中间结点
【每日一题】LeetCode——链表的中间结点
|
5小时前
|
C++
[leetcode 链表] 反转链表 vs 链表相交
[leetcode 链表] 反转链表 vs 链表相交
|
5小时前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
5小时前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
17 0
|
5小时前
【力扣】148. 排序链表
【力扣】148. 排序链表