算法总结之 向有序的环形单链表中插入新节点

算法总结之 向有序的环形单链表中插入新节点

题目: 一个环形链表从表头节点head开始不降序,同时由最后的节点指回头节点。给定这样一个环形单链表的头节点和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后的链表依然有序

 

时间复杂度O(N) 额外空间复杂度O(1) 的方法  

1 生成节点的值为num的新节点, 记为node

2 如果链表为空 让node自己组成环形链表,然后直接返回node

3如果链表不为空,令变量 pre=head, cur=head.next, 然后让他俩同步移动下去,如果遇到pre的节点小于或者等于num,并且cur的值大于或等于num 说明node应该在pre节点和cur之间插入 然后返回head即可

4 如果pre和cur转了一圈,没有发现上面所述的情况。则node应该插入到头节点前面,这种情况之所以会发生,要么是因为node节点的值比链表的每个值都大,要么是都小

5 如果打,返回原来头节点即可,如果都小,把node作为链表的头节点返回即可

请参考代码:

package TT;


public class Test113 {

    public class Node{
        public int value;
        public Node next;
        
        public Node(int data){
            this.value=data;
        }
    
    }
    
    public Node insertNum(Node head, int num){
        
           Node node = new Node(num);
           if(head==null){
               node.next=node;
               return node;
           }
          Node pre = head;
          Node cur = head.next;
          while(cur!=head){
              if(pre.value <= num && cur.value>=num){
                  break;
              }
              pre=cur;
              cur=cur.next;
          }
          pre.next=node;
          node.next=cur;
          return head.value <num ? head:node;
        
    }
    
    
    
    
    
    
}

 

posted @ 2017-09-11 17:01 toov5 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值