题目描述
输入一个链表,输出该链表中倒数第k个结点。
题目思路:除了以下两种方法,还想到一种方法:将链表倒序,然后找到正数第k个节点,其实这种方法是不行的,因为每个节点都有两个属性:next、val,倒叙后得到的正数第k个节点,虽然val相同,但是next是不同的.
python 方法1: 设置两个指针,一个先走k-1步,然后两个同时走,当先走的到达链表尾时,另一个到达倒数第k个:
class Solution:
def FindKthToTail(self, head, k):
if head is None or k <= 0:
return None
temp1 = head
temp2 = head
while k > 1:
if temp1.next is not None:
temp1 = temp1.next
k -= 1
else:
return None
while temp1.next:
temp1 = temp1.next
temp2 = temp2.next
return temp2
python 方法2:获取链表长度,从而可以得到倒数第k个节点是正数第多少个:
class Solution:
def FindKthToTail(self, head, k):
# 链表节点总数
number = 0
cur = head
while cur:
number += 1
cur = cur.next
# 倒数第k个节点在链表中正数第多少个
index = number - k
if index < 0:
return None
temp = head
while index > 0:
temp = temp.next
index -= 1
return temp
c++:
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(k == 0 || pListHead == NULL){
return NULL;
}
ListNode *pTail = pListHead;
ListNode *pHead = pListHead;
// pHead 节点指针向后移动k-1步
while(k>1){
if(pHead->next == NULL){
return NULL;
}
else{
pHead = pHead->next;
k--;
}
}
while(pHead->next){
pHead = pHead->next;
pTail = pTail->next;
}
return pTail;
}
};