找到链表的倒数第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的情况。

猜你喜欢

转载自www.cnblogs.com/bambipai/p/10704284.html