题目
一个环形单链表从头节点head开始不降续,同时由最后的节点指回头节点。给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后的链表依然有序。
说明
此题看起来很容易,但写出简洁无误的代码却不容易。
代码
package com.iqiyi;
import org.junit.Test;
public class Code2_18 {
public static class Node{
int data;
Node next;
Node(int data){
this.data=data;
}
}
public static Node insertNum(Node node,int num){
Node temp=new Node(num);
if(node==null){
temp.next=temp;
return temp;
}
Node pre=node;
Node cur=node.next;
while(cur!=node){
if(pre.data<=num&&cur.data>=num)
break;
pre=pre.next;
cur=cur.next;
}
pre.next=temp;
temp.next=cur;
return node.data<=num?node:temp;
}
@Test
public void test1(){
Node node0=new Node(1);
Node node1=new Node(3);
Node node2=new Node(5);
Node node3=new Node(7);
node0.next=node1;
node1.next=node2;
node2.next=node3;
node3.next=node0;
Node ans=insertNum(node0, 9);
Node cur=ans;
while(cur.next!=ans){
System.out.print(cur.data+" ");
cur=cur.next;
}
System.out.print(cur.data+" ");
}
@Test
public void test2(){
Node node0=new Node(1);
Node node1=new Node(3);
Node node2=new Node(5);
Node node3=new Node(7);
node0.next=node1;
node1.next=node2;
node2.next=node3;
node3.next=node0;
Node ans=insertNum(node0, 0);
Node cur=ans;
while(cur.next!=ans){
System.out.print(cur.data+" ");
cur=cur.next;
}
System.out.print(cur.data+" ");
}
@Test
public void test3(){
Node node0=new Node(1);
Node node1=new Node(3);
Node node2=new Node(5);
Node node3=new Node(7);
node0.next=node1;
node1.next=node2;
node2.next=node3;
node3.next=node0;
Node ans=insertNum(node0, 1);
Node cur=ans;
while(cur.next!=ans){
System.out.print(cur.data+" ");
cur=cur.next;
}
System.out.print(cur.data+" ");
}
}