题目描述
一个环形单链表从头节点 head 开始不降序,同时由最后的节点指回头节点。给定这样一个环形单链表的头节点 head 和 一个整数 num, 请生成节点值为 num 的新节点,并插入到这个环形链表中,保证调整后的链表依然有序。
输入描述:
环形单链表的头节点 head 和 一个整数 num。
输出描述:
在给定的函数内返回新的环形单链表的头指针。
示例1
输入
5
1 2 3 4 5
6
输出
1 2 3 4 5 6
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int len = Integer.parseInt(br.readLine());
String[] ss = br.readLine().trim().split(" ");
ListNode head = new ListNode(-1);
ListNode r = head;
for(int i=0;i<len;i++){
ListNode node = new ListNode(Integer.parseInt(ss[i]));
r.next = node;
r = node;
}
r.next = head.next;
int num = Integer.parseInt(br.readLine());
head = fun(head.next,num);
StringBuilder sb = new StringBuilder();
sb.append(head.val+" ");
r = head.next;
while(r!=head){
sb.append(r.val+" ");
r = r.next;
}
System.out.println(sb.toString().trim());
}
public static ListNode fun(ListNode head,int num){
ListNode node = new ListNode(num);
if(head==null){
node.next = node;
return node;
}
ListNode r = head;
//处理第一个
if(num<=head.val){
node.next = head;
while(r.next!=head){
r = r.next;
}
r.next = node;
return node;
}
while(r.next!=head&&r.next.val<num){
r = r.next;
}
node.next = r.next;
r.next = node;
return head;
}
}
class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val = val;
}
}