找到链表的倒数第k个节点 python

  题目:给定一个链表的头节点,输出链表倒数第k个节点的值

  分析:最简单的思路就按顺序访问链表节点,得到链表的长度x之后,再次从头节点出发,访问到第x-k+1个节点时,就是链表倒数第k个节点,但是这样的方法对前x-k+1个节点重复访问了两遍,效率较低。在解答链表相关题目时,设置两个甚至三个指针常用的方法,在这个题目中,可以设置两个指针,一个为a,一个为b,a先出发,在a访问了k-1个节点时,b从头节点出发,然后两个指针同时向后访问,当a访问到最后一个节点时,b访问到的就是倒数第k个节点,代码如下。

def lastknode(head,k):
if head==None or k==0:return None
else:
ahead=head#指针a
for i in range(k-1):
if ahead.next!=None:
ahead=ahead.next
else: return None
behend=head#指针b
while ahead.next!=None:
ahead=ahead.next
behend=behend.next
return behend

  在访问的过程中,要随时判断当前节点指向的是否是空节点,避免出现链表长度小于k的情况。

上一篇:Redis学习笔记一:基本安装和配置


下一篇:MS-DOS 6.22 +Vim+masm 汇编环境