题解 | #链表内指定区间反转#

链表内指定区间反转

http://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c

这里使用的方法比较复杂: 1.遍历链表并且使用切片接收 2.切片指定范围的翻转(切片的切片): 1.根据切片的切片长度指定for循环终止条件 2.交换 3.将切片的每个元素指定连接关系,最后一个元素的Next赋为nil 4.输出切片的首结点

func reverseBetween(head *ListNode, m int, n int) *ListNode {

	// write code here
	var res []*ListNode
	for head != nil {
		res = append(res, head)
		head = head.Next
	}
	SwapRes(res[m-1 : n])
	node := outRes(res)
	return node
}

func outRes(res []*ListNode) *ListNode {
	for i := 0; i < len(res)-1; i++ {
		if res[i] != nil {
			res[i].Next = res[i+1]
		}
		res[len(res)-1].Next = nil
	}
	return res[0]
}

func SwapRes(res []*ListNode) {
	var l int
	if len(res)%2 == 0 {
		l = len(res) >> 1
	} else {
		l = (len(res) - 1) >> 1
	}
	for i := 0; i < l; i++ {
		tmp := res[i]
		res[i] = res[len(res)-1-i]
		res[len(res)-1-i] = tmp
	}
}

全部评论

相关推荐

11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务