Go语言每日一题——链表篇(七)
传送门
牛客面试笔试必刷101题 ----------------删除链表的倒数第n个节点
题目以及解析
题目
解题代码及解析
解析
这一道题与昨天的题目在解题思路上有一定的相似之处,都是基于双指针定义快慢指针,这里我们让快指针先走n步,又因为n一定为有效值,所以快指针为空时,慢指针刚好离快指针n个单位距离,即链表的倒数第n个节点
代码
package main
import _ "fmt"
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
func removeNthFromEnd(head *ListNode, n int) *ListNode {
fast := head
slow := head
for i := 0; i < n+1; i++ {
if fast == nil {
return head.Next
}
fast = fast.Next
}
for fast != nil {
slow = slow.Next
fast = fast.Next
}
slow.Next = slow.Next.Next
return head
}
总结:
这题依旧是一道链表题,但是它很好的体现双指针思想的引用,大家可以简单的思考一下,用这道题来作为双指针算法的练手题