【数据结构--链表】链表中倒数第k个结点

题目描述:

【数据结构--链表】链表中倒数第k个结点_第1张图片

实现思路:

1、先遍历链表,算出链表总长度,然后再计算出顺数第几个是对应节点,返回指向该节点的指针即可

2、快慢指针法 fast, slow, 首先让fast先走k步,然后fast,slow同时走,fast走到末尾时,slow走到倒数第k个节点。

代码实现:

 1、

 * 
 * @param pListHead ListNode类 
 * @param k int整型 
 * @return ListNode类
 */
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
    if(pListHead==NULL)
        return NULL;
    struct ListNode* cur=pListHead;//单链表
    int num=0;
    while(cur)
    {
        cur=cur->next;
        num++;
    }
    if(k>num)
        return NULL;//k比链表元素总数还大
    int n=num-k;
    cur=pListHead;
    while(n--)
    {
        cur=cur->next;
    }
    return cur;
}

 2、

class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        struct ListNode* slow = pListHead;
        struct ListNode* fast = slow;
        while(k--)
        {
            if(fast)
                fast = fast->next;
            else
                return NULL;
        }
         
        while(fast)
        {
            slow = slow->next;
            fast = fast->next;
        }
         
        return slow;
    }
};

你可能感兴趣的:(链表,数据结构)