扫码阅读
手机扫码阅读
听:测试开发面试题解(4)- 删除链表的倒数第n个节点
44 2024-10-18
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
文章来源:
光荣之路
扫码关注公众号
测试开发面试题解:删除链表的倒数第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+薪资增长需要超过一年的努力。
想要了解更多内容?
文章来源:
光荣之路
扫码关注公众号
光荣之路的其他文章
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设
白皮书上线