编程练习:
1、LeetCode或intCode, CodeChef可免费查看他人源码;
2、可独立在线IDE验证的:LeetCode、Anycodes、Fenby、CodeChef、Dooccn;
3、仅需学习编程语言:Anycodes或Frenby;
4、更系统全面的深入学习,建议到实验楼或极客学院;
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
参考地址:LeetCode初级算法的Python实现--链表 - NSGUF - 博客园 (cnblogs.com)
import json # Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = None class Solution: def getKthFromEnd(self, head: ListNode, k: int) -> ListNode: node, n = head, 0 while node: node = node.next n += 1 node = head for _ in range(n-k): node = node.next return node # 将列表转换成链表 def stringToListNode(str_input): numbers = str_input dummyRoot = ListNode(0) ptr = dummyRoot for number in numbers: ptr.next = ListNode(number) ptr = ptr.next ptr = dummyRoot.next return ptr # 将链表转换成字符串 def listNodeToString(node): if not node: return "[]" result = "" while node: result += str(node.val) + ", " node = node.next return "[" + result[:-2] + "]" if __name__ == '__main__': head_input = json.loads(input().strip()) k_input = int(input().strip()) ptr_output = stringToListNode(head_input) result = Solution().getKthFromEnd(ptr_output, k_input) print(listNodeToString(result))