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;
}
}
}
剑指offer T29 排序的循环链表
最新推荐文章于 2024-08-18 22:19:19 发布
该博客主要讨论了如何在一个已排序的循环链表中插入新节点。提供的Java代码实现了一个`insert`方法,该方法根据链表的当前状态(空、只有一个元素或多个元素)进行不同操作,确保插入后链表依然保持排序。`insertCore`方法通过遍历寻找合适的位置,并更新链表结构来完成插入操作。
摘要由CSDN通过智能技术生成