扫码阅读
手机扫码阅读

听:测试开发面试题解(4)- 删除链表的倒数第n个节点​

10 2024-10-18

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:听:测试开发面试题解(4)- 删除链表的倒数第n个节点​
文章来源:
光荣之路
扫码关注公众号
文章摘要

测试开发面试题解:删除链表的倒数第n个节点

本文由何发奋撰写,解析了一个中等难度的链表操作面试题:删除链表的倒数第n个节点,并返回链表头节点。示例中,给定链表1->2->3->4->5和n=2,结果应为1->2->3->5。

常规思路

要删除倒数第n个节点,首先需确定链表长度,通过遍历链表并计数可得。接着,利用链表长度确定倒数第n个节点的顺序位置。使用两个指针,一个指向当前节点,另一个指向父节点。当当前节点为倒数第n个时,若它非头节点,通过父节点删除当前节点;若它是头节点,则直接将头节点指向下一个节点。

代码实现


def removeNthFromEnd(head, n):
    temp = head
    result = head
    length = 0
    while temp:
        length += 1
        temp = temp.next
    k = length - n
    pre = None
    while k > 0:
        k -= 1
        pre = head
        head = head.next
    if pre:
        pre.next = head.next
    else:
        result = head.next
    return result

代码首先通过遍历获取链表长度,然后删除倒数第n个节点,并返回修改后的链表。

进阶 - 使用快慢指针

进阶方法使用快慢指针,以及一个记录慢指针父节点的指针。快指针先移动n-1步,然后快慢指针一起移动。当快指针到达链表尾部时,慢指针指向的即倒数第n个节点。

文章最后提供了测试开发学习资源链接,并鼓励每日投入至少2小时学习时间和持续编码实践来提高技能,指出10k+薪资增长需要超过一年的努力。

想要了解更多内容?

查看原文:听:测试开发面试题解(4)- 删除链表的倒数第n个节点​
文章来源:
光荣之路
扫码关注公众号