有一个有序数组A和一个整数val,请你用A构造一个结点值有序的环形单链表,并对其插入一个结点值为val的结点,并且保证这个环形单链表依然有序。
给定包含链表的所有元素的值(从头结点开始)的数组A,同时给定val,请构造出这个单链表,并返回插入该val值后的头结点。
在环形链表的插入中,如果从头结点出发,走了一圈都没能发现可以插入的位置,说明要么这个数比所有数都大,要么比所有数都小,此时所以应该在原来的尾结点和头结点之间插入值,并且为了保证的有序性,如果是val比所有数都小,那么应该返回这个新插入的值。
代码:
func Insert(A []int, val int) *ListNode {
// write code here
if len(A) == 0 {
return (*ListNode)(nil)
}
head := ring_destruct(A)
cur := head
for ; cur.Next.Val < val && cur.Next != head; cur = cur.Next {
}
newnode := &ListNode{val, nil}
newnode.Next = cur.Next
cur.Next = newnode
if newnode.Next == head {
head = newnode
}
return head
}
func ring_destruct(A []int) *ListNode {
head := &ListNode{A[0], nil}
pre := head
for i := 1; i < len(A); i++ {
tmp := &ListNode{A[i], nil}
pre.Next = tmp
pre = pre.Next
}
pre.Next = head
return head
}