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月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
55 1
|
5月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
72 0
Leetcode第21题(合并两个有序链表)
|
5月前
|
索引
Leetcode第三十三题(搜索旋转排序数组)
这篇文章介绍了解决LeetCode第33题“搜索旋转排序数组”的方法,该问题要求在旋转过的升序数组中找到给定目标值的索引,如果存在则返回索引,否则返回-1,文章提供了一个时间复杂度为O(logn)的二分搜索算法实现。
41 0
Leetcode第三十三题(搜索旋转排序数组)
|
5月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
50 0
LeetCode第二十四题(两两交换链表中的节点)
|
5月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
58 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
5月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
69 0
|
5月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
49 0
|
5月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
128 0
|
5月前
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
37 0
|
5月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
27 0