标签:lis test string == 问题: 有序 nod out data
/**
* 问题: 向有序的环形单链表中插入新节点
* 一个环形单链表从头节点 head开始不降序, 同时由最后的节点指回头节点。给定这样
* 一个环形单链表的头节点 head和一个整数 num, 请生成节点值为 num的新节点,并插入到
* 这个环形链表中, 保证调整后的链表依然有序。
*
* 解题:
* 1. 生成节点值为 num的新节点, 记为 node。
* 2. 如果链表为空, 让 node自己组成环形链表, 然后直接返回node。
* 3. 如果链表不为空, 令变量 pre=head, cur=head.next, 然后令 pre和 cur同步
* 移动下去, 如果遇到 pre的节点值小于或等于 num,并且 cur的节点值大于或等于 num,说
* 明 node应该在 pre节点和 cur节点之间插入, 插入 node, 然后返回 head即可。
* 例如, 链表 1->3->4->1->… , num=2。应该把节点值为 2的节点插入到 1和 3之间 ,
* 然后返回头节点。
* 4. 如果 pre和 cur转了一圈, 这期间都没有发现步骤 3所说的情况,说明 node应该插入
* 到头节点的前面, 这种情况之所以会发生, 要么是因为 node节点的值比链表中每个节总的值
* 都大, 要么是因为 node的值比链表中每个节点的值都小。
* 分别举两个例子:
* 示例1, 链表 1->3->4->1->… , num=5, 应该把节点值为 5 的节点,插
* 入到节点1 的前面;
* 示例2, 链表 1->3->4->1->…, num=O, 也应该把节点值为 0 的节点,插
* 入到节点1 的前面。
* 5. 如果 node节点的值比链表中每个节点的值都大, 返回原来的头节点即可:如果 node节点
* 的值比链表中每个节点的值都小, 应该把 node作为链表新的头节点返回。
*
* @author 雪瞳
*
*/
*代码
public class Node {
public int value;
public Node next;
public Node(int data){
this.value=data;
}
}
public class InsertCircleNodeList {
public Node insertCircleNodeList(Node head,int num){
Node newHead = null;
Node insert = new Node(num);
Node preCurrent = null;
Node current = null;
int flag = 0;
if(head==null){
insert.next=insert;
return insert;
}
preCurrent = head;
current = head.next;
while(current != head){
if(preCurrent.value <= num && num <=current.value){
preCurrent.next=insert;
insert.next=current;
flag = 1;
}
preCurrent=current;
current=current.next;
}
if(flag == 0){
insert.next=head;
preCurrent.next=insert;
if(head.value>num){
return insert;
}else if(head.value<num){
return head;
}
}
return head;
}
}
public class TestInsertCircleNodeList {
public static void main(String[] args) {
TestInsertCircleNodeList test = new TestInsertCircleNodeList();
InsertCircleNodeList insert = new InsertCircleNodeList();
Node n1 = new Node(1);
Node n2 = new Node(2);
Node n3 = new Node(3);
Node n4 = new Node(4);
Node n5 = new Node(6);
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
n5.next = n1;
Node head = n1;
test.showNodeList(head);
Node result = insert.insertCircleNodeList(head, 5);
test.showNodeList(result);
}
public void showNodeList(Node head){
int flag = 0;
Node current = head.next;
System.out.println("链表内元素如下...");
System.out.print(head.value+"\t");
while(current!=head){
flag ++;
System.out.print(current.value+"\t");
current = current.next;
if(flag == 5){
System.out.println();
}
}
System.out.println();
}
}
*运行结果
标签:lis test string == 问题: 有序 nod out data
原文地址:https://www.cnblogs.com/walxt/p/12636732.html