剑指offer22-AcWing-33. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个结点。
注意:
k >= 0;
如果k大于链表长度,则返回 NULL;
样例
输入:链表:1->2->3->4->5 ,k=2
输出:4
思路:
首先判断链表为空、以及链表没有k个、k<=0的情况
然后,初始两个指针,让其中一个先走k步,第二个指针再开始走直到第一个指针为空,则第二个指针指向的位置即结果。
c++ code:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* findKthToTail(ListNode* pListHead, int k) {
if(pListHead == NULL || k == 0){
return NULL;
}
ListNode* nowNode = pListHead;
ListNode* resNode = pListHead;
while(k > 0 && nowNode){
nowNode = nowNode->next;
k--;
}
if(k > 0){
return NULL;
}
while(nowNode){
nowNode = nowNode->next;
resNode = resNode->next;
}
return resNode;
}
};
python code:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def findKthToTail(self, pListHead, k):
"""
:type pListHead: ListNode
:type k: int
:rtype: ListNode
"""
if pListHead == None or k == 0:
return None
nowNode = pListHead
resNode = pListHead
while k > 0 and nowNode:
nowNode = nowNode.next
k -= 1
if k > 0:
return None
while nowNode:
nowNode = nowNode.next
resNode = resNode.next
return resNode