【面试必刷TOP101】删除链表的倒数第n个节点 & 两个链表的第一个公共结点

目录

题目:删除链表的倒数第n个节点_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

解题思路:

代码:

过啦!!!

题目:两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:删除链表的倒数第n个节点_牛客题霸_牛客网 (nowcoder.com)

【面试必刷TOP101】删除链表的倒数第n个节点 & 两个链表的第一个公共结点_第1张图片

题目的接口:

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
}

过啦!!!

【面试必刷TOP101】删除链表的倒数第n个节点 & 两个链表的第一个公共结点_第2张图片

题目:两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com)

【面试必刷TOP101】删除链表的倒数第n个节点 & 两个链表的第一个公共结点_第3张图片

题目的接口:

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
}

过啦!!!

【面试必刷TOP101】删除链表的倒数第n个节点 & 两个链表的第一个公共结点_第4张图片

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

你可能感兴趣的:(牛客面试必刷,TOP101,面试,算法,数据结构)