Python链表中倒数第k个结点

本文阅读 2 分钟
首页 Python笔记 正文

代码的鲁棒性。需要注意:如果输入的链表为空;k大于链表的长度;k为0的情况。对于正常情况,设置两个指针分别指向头结点,第一个指针向前走k-1步,走到正数第k个结点,同时保持第二个指针不动,然后第一个指针和第二个指针每次同时前移一步,这样第一个指针指向尾结点的时候,第二个指针指向倒数第k个结点。判断尾结点的条件是 pNode.next == None。

  1. ''
  2. 输入一个链表,输出该链表中倒数第k个结点。
  3. '''
  4. '''
  5. 这道题的思路很好
  6. 如果在只希望一次遍历的情况下, 寻找倒数第k个结点, 可以设置两个指针
  7. 第一个指针先往前走k-1步, 然后从第k步开始第二个指针指向头结点
  8. 然后两个指针一起遍历
  9. 当地一个指针指向尾节点的时候, 第二个指针正好指向倒数第k个结点
  10. 推广: 寻找中间节点, 两个指针一起, 第一个指针每次走两步, 第二个指针每次走一步, 快指针指到尾部, 慢指针正好指到中间
  11. '''
  12. # -*- coding:utf-8 -*-
  13. class ListNode:
  14. def __init__(self, x):
  15. self.val = x
  16. self.next = None
  17. class Solution:
  18. def FindKthToTail(self, head, k):
  19. if head == None or k <= 0:
  20. return None
  21. pAHead = head
  22. pBehind = None
  23. for i in range(k-1):
  24. if pAHead.next != None:
  25. pAHead = pAHead.next
  26. else:
  27. return None
  28. pBehind = head
  29. while pAHead.next != None:
  30. pAHead = pAHead.next
  31. pBehind = pBehind.next
  32. return pBehind
  33. node1 = ListNode(10)
  34. node2 = ListNode(11)
  35. node3 = ListNode(13)
  36. node1.next = node2
  37. node2.next = node3
  38. S = Solution()
  39. print(S.FindKthToTail(node1, 1).val)
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

Python调整数组顺序使奇数位于偶数前面
« 上一篇 01-21
Python递归以及非递归实现反转链表
下一篇 » 01-21

发表评论