剑指 Offer II 029. 排序的循环链表
题目:
思路:
【1】注意点:返回的要是一个环状的链表
代码展示:
//时间0 ms击败100% //内存40.8 MB击败65.17% //时间复杂度:O(n),其中 n 是链表的节点数。需要遍历链表一次寻找插入节点的位置,插入节点的时间是 O(1)。 //空间复杂度:O(1) /* // Definition for a Node. class Node { public int val; public Node next; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, Node _next) { val = _val; next = _next; } }; */ class Solution { public Node insert(Node head, int insertVal) { Node node = new Node(insertVal); // 当链表为空的时候 if (head == null) { node.next = node; return node; } // 当链表只有一个元素的时候 if (head.next == head) { head.next = node; node.next = head; return head; } Node curr = head, next = head.next; while (next != head) { //如果符合升序规则则停下 if (insertVal >= curr.val && insertVal <= next.val) { break; } //这种是说明遇到了类似[3,4,1],这种4与1的交界点 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; } }