剑指 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;
}
}
网友评论