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

链表内指定区间反转

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
	}
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-29 17:30
点赞 评论 收藏
分享
点赞 评论 收藏
分享
05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求...:注意把武大标粗标大 本地你俩不是乱杀
实习进度记录
点赞 评论 收藏
分享
nus2201602...:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务