【牛客题霸题解】链表中倒数第k个结点

链表中倒数第k个结点

http://www.nowcoder.com/questionTerminal/886370fe658f41b498d40fb34ae76ff9

解法:

  1. 定义两个指针,fast,slow指向链表的头结点
  2. fast指针先走k步,走的时候要注意判断一下链表的长度是否大于等于k。如果链表的长度也等于k的话,快指针走k步正好会走到空。如果在走第k步之前链表就指向空的话,说明链表长度小于k,直接返回空。
  3. 然后fast指针和slow指针一起走。当fast指针指向空的时候,slow指针指向的就是倒数第k个节点

例:k=2
fast先走两步
图片说明
fast指向空的时候,slow指的就是倒数第二个结点了
图片说明
c++

class Solution {
public:
    ListNode* FindKthToTail(ListNode* pHead, int k) {
        ListNode* fast = pHead;
        ListNode* slow = pHead;
        for(int i = 0 ; i < k ; i++)
        {
            if(fast == NULL){return NULL;}
            fast = fast->next;
        }
        while(fast!=NULL)
        {
            fast = fast->next;
            slow = slow->next;
        }
        return slow;
    }
};

java

public class Solution {
    public ListNode FindKthToTail (ListNode pHead, int k) {
        ListNode fast = pHead;
        ListNode slow = pHead;
        for(int i = 0 ; i < k ; i++)
        {
            if(fast == null){return null;}
            fast = fast.next;
        }
        while(fast!=null)
        {
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
}

python

class Solution:
    def FindKthToTail(self , pHead , k ):
        fast = pHead;
        slow = pHead;
        for i in range(0,k):
            if fast == None:
                return None
            fast = fast.next;
        while fast!=None:
            fast = fast.next;
            slow = slow.next;
        return slow;
牛客题霸题解 文章被收录于专栏

QAQ

全部评论
你的解题思路清晰,容易理解,我很喜欢,感谢有你!
点赞 回复 分享
发布于 2021-04-28 23:37

相关推荐

评论
8
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务