Python链表中倒数第k个结点
代码的鲁棒性。需要注意:如果输入的链表为空;k大于链表的长度;k为0的情况。对于正常情况,设置两个指针分别指向头结点,第一个指针向前走k-1步,走到正数第k个结点,同时保持第二个指针不动,然后第一个指针和第二个指针每次同时前移一步,这样第一个指针指向尾结点的时候,第二个指针指向倒数第k个结点。判断尾结点的条件是 pNode.next == None。
- ''
- 输入一个链表,输出该链表中倒数第k个结点。
- '''
-
- '''
- 这道题的思路很好
- 如果在只希望一次遍历的情况下, 寻找倒数第k个结点, 可以设置两个指针
- 第一个指针先往前走k-1步, 然后从第k步开始第二个指针指向头结点
- 然后两个指针一起遍历
- 当地一个指针指向尾节点的时候, 第二个指针正好指向倒数第k个结点
- 推广: 寻找中间节点, 两个指针一起, 第一个指针每次走两步, 第二个指针每次走一步, 快指针指到尾部, 慢指针正好指到中间
- '''
-
- # -*- coding:utf-8 -*-
- class ListNode:
- def __init__(self, x):
- self.val = x
- self.next = None
-
- class Solution:
- def FindKthToTail(self, head, k):
- if head == None or k <= 0:
- return None
-
- pAHead = head
- pBehind = None
-
- for i in range(k-1):
- if pAHead.next != None:
- pAHead = pAHead.next
- else:
- return None
- pBehind = head
- while pAHead.next != None:
- pAHead = pAHead.next
- pBehind = pBehind.next
- return pBehind
-
- node1 = ListNode(10)
- node2 = ListNode(11)
- node3 = ListNode(13)
- node1.next = node2
- node2.next = node3
-
- S = Solution()
- print(S.FindKthToTail(node1, 1).val)
解压密码: detechn或detechn.com
免责声明
本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。
本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。