美文网首页
2022-02-25 029.排序的循环链表 537. 复数

2022-02-25 029.排序的循环链表 537. 复数

作者: 16孙一凡通工 | 来源:发表于2022-02-25 09:53 被阅读0次

    剑指 Offer II 029. 排序的循环链表

    用最笨的方法:既然是有序循环链表,那就找最小值和最大值所在的节点,
    分情况处理,若插入节点值在最小和最大之间 和插入节点值不在其之间。对其分情况插入。注意此题当中有序包含了相邻节点值相同的情况,所以写起来没注意,花了不少时间。
    Go版本:

    func insert(aNode *Node, x int) *Node {
        if aNode==nil{
            aNode=&Node{Val:x};
            aNode.Next=aNode
            return aNode
        }
    
        node,minValue,maxValue:=aNode.Next,aNode.Val,aNode.Val;
    
        // 找到最小和最大的元素
        for node!=aNode{
            if node.Val<=minValue{
             minValue=node.Val;
            } 
             if node.Val>=maxValue{
              maxValue=node.Val;
             }
            node=node.Next;      
        }
        for node.Val!=minValue{
         node=node.Next;  
        }
        fmt.Println(maxValue)
        fmt.Println(minValue)
        //  fmt.Println(node.Val)
        next:=node.Next;
        minNode:=node
       count:=0
       
        for next!=minNode{
            //  fmt.Println("循环次数")
        if (x>node.Val && x<next.Val) || x==node.Val {
          
            //      fmt.Println("node:",node.Val)
    
            //  fmt.Println("next:",next.Val)
            temp:=&Node{Val:x};
            node.Next=temp
            temp.Next=next;
            count=1;
            break;
        }
        
        node=node.Next;
        next=next.Next;
       }
        // fmt.Println("out:node:",node.Val)
        //   fmt.Println("out_next:",next.Val)
    
        //      fmt.Println("count:",count)
       if count==0{
           for next.Val!=maxValue   {
              next=next.Next;
              
           }
           if next.Next.Val==next.Val{
               next=next.Next;
           }
            // fmt.Println("out_next:",next.Val)
           node=next.Next;
           
            temp:=&Node{Val:x};
            next.Next=temp
            temp.Next=node;
           
       }
       return aNode
      
    }
    

    最笨的方法解决。
    自己写一个针对的String转int和int转String考虑正负号的函数。

    Go版本:

    import (
        "strconv"
    )
    func complexNumberMultiply(num1 string, num2 string) string {
    
    //    先按照加号分开
        // 看两者是不是存在 +  -的
        // 第一个+后面
        // 没有
    
        loc_a,loc_b:=0,0;
       
    
        for i:=0;i<len(num1);i++{
            if num1[i]=='+'{
                loc_a=i;
              }
            }
         for i:=0;i<len(num2);i++{
            if num2[i]=='+'{
                loc_b=i;
              }
            }
           
            num1_real:=num1[:loc_a];
            num1_:=num1[loc_a+1:len(num1)-1];
            num2_real:=num2[:loc_b];
            num2_:=num2[loc_b+1:len(num2)-1];
    
            //  fmt.Println(num1_real,"i",num1_);
            //  fmt.Println(num2_real,"i",num2_);
    
            a,a_,b,b_:=StringToInt(num1_real),StringToInt(num1_),StringToInt(num2_real),StringToInt(num2_);
            // fmt.Println(a,"a",a_);
            // fmt.Println(b,"b",b_);
            res_real,res_:=a*b-a_*b_,a*b_+b*a_;
            //  fmt.Println(res_real,"res",res_real);
          
            str:=IntToString(res_real);
           str_:=IntToString(res_);
           return str+"+"+str_+"i";
           
    
    }
    func StringToInt(a string)(int){
        if a[0]=='-'{
            a=a[1:]
            fmt.Println(a);
            value,_:=strconv.Atoi(a);
            value=-value;
            return value;
        }else{
          value,_:=strconv.Atoi(a);
          return value;
        }
    }
    func IntToString(a int)(string){
        if a>=0{
              value:=strconv.Itoa(a);
              return value;
    
        }else{
            a=-a;
             value:=strconv.Itoa(a);
              return "-"+value;
    
        }
    
    }
    

    相关文章

      网友评论

          本文标题:2022-02-25 029.排序的循环链表 537. 复数

          本文链接:https://www.haomeiwen.com/subject/ialxrrtx.html