一個環形單鏈表從頭節點head開始不降續,同時由最後的節點指回頭節點。給定這樣一個環形單鏈表的頭節點head和一個整數num,請生成節點值爲num的新節點,並插入到這個環形鏈表中,保證調整後的鏈表依然有序。node
此題看起來很容易,但寫出簡潔無誤的代碼卻不容易。this
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+" ");
}
}
複製代碼