LeetCode——单向链表相关

两两交换位置

func swapPairs(head *ListNode) *ListNode {

	pre := ListNode{Val: -1, Next: head}
	temp := &pre
	for temp.Next != nil && temp.Next.Next != nil {
		start := temp.Next
		end := temp.Next.Next
		temp.Next = end
		start.Next = end.Next
		end.Next = start
		temp = start
	}
	return pre.Next
}

连续K个节点做逆序

func reverseKGroup(head *ListNode, k int) *ListNode {
	temp := head
	for i:=1;i<k&&temp != nil;i++{
		temp=temp.Next
	}
	if temp==nil{
		return head
	}
	tempNext := temp.Next
	temp.Next=nil

	nextNode := reverse(head)
	subTemp := reverseKGroup(tempNext,k)
	head.Next=subTemp
	return nextNode
}

链表逆序

func reverse (head *ListNode) *ListNode{
	var next *ListNode
	var pre *ListNode
	for head!=nil {
		next = head.Next
		head.Next=pre
		pre=head
		head=next
	}
	return pre
}

删除倒数第N个节点

func removeNthFromEnd(head *ListNode, n int) *ListNode {
	num := n
	quick := head
	var last *ListNode
	last = &ListNode{}
	last.Next = head
	slow := last
	for quick!=nil{
		quick = quick.Next
		if num<=0{
			slow=slow.Next
		}
		num--
	}
	slow.Next=slow.Next.Next
	return last.Next
}
发布了151 篇原创文章 · 获赞 72 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/liyuxing6639801/article/details/105164254
今日推荐