-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
Copy path链表中倒数第k个结点.py
46 lines (39 loc) · 1.27 KB
/
链表中倒数第k个结点.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
'''
输入一个链表,输出该链表中倒数第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)