链表中倒数第K个节点

从尾到头打印链表

描述

输入一个链表,输出该链表中倒数第k个结点。

思考

其实这个解法和我们的上一题类似,就是使用一个数组来存储每个节点,最后我们输出第 len(list) - K 个节点即可


        while node:

            list.append(node)

            node = node.next



        # K比链表长度大

        if k > len(list):

            return None



        return list[len(list) - k]

完整代码


# 链表中倒数第K个节点

# 输入一个链表,输出该链表中倒数第k个结点。



# 链表结构

class ListNode:

    def __init__(self, x):

        self.val = x

        self.next = None



# 打印链表

def printChain(head):

    node = head

    while node:

        print(node.val)

        node = node.next



class Solution:

    def FindKthToTail(self, head, k):

        if k <= 0 or head == []:

            return None



        node = head

        list = []

        while node:

            list.append(node)

            node = node.next



        # K比链表长度大

        if k > len(list):

            return None



        return list[len(list) - k]



if __name__ == '__main__':

    # 创建链表

    l1 = ListNode(1)

    l2 = ListNode(2)

    l3 = ListNode(3)

    l4 = ListNode(4)

    l5 = ListNode(5)



    l1.next = l2

    l2.next = l3

    l3.next = l4

    l4.next = l5



    print(Solution().FindKthToTail(l1, 1))

思考2

第二种方式就是我们需要使用两个指针,第一个指针先走K步,然后两个指针在同时行走,最后当第一个指针到达终点的时候,第二个指针就是倒数第K个值。
在这里插入图片描述
完整代码


class Solution:



    def FindKthToTail(self, head, k):

        if k <= 0 or head == []:

            return None

        list = []

        first = head

        second = head

        # 先让第一个节点走 K步

        for i in range(0, k):

        	# 判断第一个是否走完

            if first == None:

                return None

            first = first.next



        # 然后两个节点在继续走,当first走到头的时候,second就是倒数第K个节点

        while first:

            first = first.next

            second = second.next

        return second

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值