题目:删除链表的倒数第n个节点_牛客题霸_牛客网 (nowcoder.com)
题目的接口:
package main 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 { // write code here }
解题思路:
这道题的解题思路其实和上一题找出倒数后 k 个节点的思路是一样的,首先就是用快慢指针把 k 的位置找到,这里需要删除这个位置的节点,那咱们只需要把它的前一个节点找到就行,
所以只需要设置一个 prev 节点作为他的上一个节点就搞定了,代码如下:
代码:
package main 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 prev := head for i := 0; i < n; i++ { fast = fast.Next } for fast != nil { slow = slow.Next fast = fast.Next } if prev == slow { return slow.Next } else { for prev.Next != slow { prev = prev.Next } prev.Next = slow.Next } return head }
过啦!!!
题目:两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com)
题目的接口:
package main import . "nc_tools" /* * type ListNode struct{ * Val int * Next *ListNode * } */ /** * * @param pHead1 ListNode类 * @param pHead2 ListNode类 * @return ListNode类 */ func FindFirstCommonNode( pHead1 *ListNode , pHead2 *ListNode ) *ListNode { // write code here }
解题思路:
这道题目也有个很巧妙的解法,怎么找到相交链表他们相交的地方呢?只要他们把自己和对方的路都走一遍,这样他们走的路程就是一样的,这样他们相交的地方就是链表的交汇点了~
代码:
package main import . "nc_tools" /* * type ListNode struct{ * Val int * Next *ListNode * } */ /** * * @param pHead1 ListNode类 * @param pHead2 ListNode类 * @return ListNode类 */ func FindFirstCommonNode( pHead1 *ListNode , pHead2 *ListNode ) *ListNode { l1 := pHead1 l2 := pHead2 for l1 != l2 { if l1 == nil { l1 = pHead2 } else { l1 = l1.Next } if l2 == nil { l2 = pHead1 } else { l2 = l2.Next } } return l1 }
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果感到有所收获的话可以给博主点一个赞哦。
如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~