程序员代码面试指南刷题--第二章.向有序的环形单链表中插入新节点

题目描述
一个环形单链表从头节点 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;
    }
}
发布了189 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44406146/article/details/105380306