一个有序的环形单链表,从头节点开始升序,同时由最后一个结点指回头节点,给定一个环形链表的头节点和一个数值num,创建一个数值为num的新节点,将该节点插入到环形单链表中,要求链表始终有序
这道题就是简单的遍历环形单链表,然后插入新节点,只需要考虑一些特殊情况即可
链表为空:新节点成环返回
链表正常,且新节点插在中间:正常插入
链表正常,但新节点的值会影响链表的有序:将新节点插在最后一个结点和头节点的中间(这里需要注意返回的头节点需要看头节点的值和新节点谁的值小,谁的值小谁作为head返回)
链表的遍历
public static Node insertNum(Node head,int num) {
Node newNode = new Node(num);
if(head == null) {
newNode.next = newNode;
return newNode;
}
Node pre = head;
Node cur = head.next;
while(cur != head) {
if(pre.value = num) {
// 当前值处于pre和cur之间,插入
newNode.next = cur;
pre.next = newNode;
break;
}
// 更新pre和cur
pre = pre.next;
cur = cur.next;
}
if(cur == head) {
newNode.next = cur;
pre.next = newNode;
}
return head.value > num ? newNode : head;
}
代码解析:就是对环形单链表的特殊情况进行处理,当链表为空,新节点成环返回。不为空就循环链表,当循环过程中有满足条件的位置,就将新节点插入该位置,如果循环到头节点都不满足,则将新节点插入到头节点之前。最后对新节点和头节点进行比较,返回值较小的哪一个。
当题目要求我们对链表进行插入、删除等操作的时候,我们一般都会用到当前结点的前一个结点,所以我们一般创建一个新节点来保存当前节点的前一个结点。有时候也会保存当前节点的下一个结点
Original: https://www.cnblogs.com/foldn/p/15920026.html
Author: foldn
Title: 向有序环形单链表中插入新节点
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/579758/
转载文章受原作者版权保护。转载请注明原作者出处!