5.2 链表-环形链表插入值

有一个有序数组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
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值