2023-03-01 leetcode-单链表-查找倒数第N个元素-双指针-思考

摘要:

其实还是要对单链表的操作熟悉, 思路上来说, 还是使用双指针的思路

要求:

  1. 单链表
  2. 找出倒数第N个元素
  3. 只能用一次遍历

思考:

  1. 如果没有限制只能一次遍历, 那么最简单的做法,就是先遍历一次找到链表长度, 然后就可以找到要遍历到第几个元素
  2. 一次遍历的话, 可以用两个指针, 第一个指针先前进N步, 第二个指针再开始同步前进, 这样当第一个指针前进到结尾时, 第二个指针就是倒数第N个元素

题解:

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    Node* next;

    Node():data(-1),next(nullptr)
    {}

    
    Node(int value):data(value),next(nullptr)
    {}
};

struct List {
    Node* head;
    Node* tail;

    List():head(nullptr),tail(nullptr)
    {}
};

void ShowList(List* list) {
    if (!list) {
        return;
    }

    if (!list->head) {
        return;
    }
    
    Node* node = list->head;
    while (node) {
        printf("%d\n", node->data);
        node = node->next;
    }
}

Node* find(List* list, int n) {

    if (!list) {
        return nullptr;
    }

    if (!list->head) {
        return nullptr;
    }

    Node* first = list->head;
    Node* sencod = list->head;

    for (int i = 0; i < n; i++) {
        if (!first->next) {
            return nullptr;
        }

        first = first->next;
    }

    while (first) {
        first = first->next;
        sencod = sencod->next;   
    }

}

int main(int argc, const char** argv) {

    List* list = new List;

    Node* n1 = new Node(1);
    Node* n2 = new Node(2);
    Node* n3 = new Node(3);
    Node* n4 = new Node(4);
    Node* n5 = new Node(5);

    list->head = n1;
    n1->next = n2;
    n2->next = n3;
    n3->next = n4;
    n4->next = n5;

    // ShowList(list);

    Node* v = find(list, 2);

    printf("%d\n", v->data);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值