文章
33
粉丝
253
获赞
1
访问
15.6k
 
1. 循环遍历整个链表根据 位置k找到要访问的节点即可
2.用一个指针先遍历整个链表求出链表的长度 倒数第k个位置就是n-k+1 (假设链表长度是n)
然后在设立一个循环找寻位置即可
typedef struct Node {
    int data;          // 节点数据域
    struct Node *next; // 指向下一个节点的指针
} Node, *LinkList;
// 2. 查找倒数第k个节点的函数(两次遍历法)
int findKthFromTail(LinkList list, int k, int *outData) {
    // 参数说明:list为链表头指针(含表头结点),k为目标倒数位置,outData存储找到的data(输出参数)
    // 返回值:1=成功,0=失败
    // 步骤1:合法性校验(空链表、无数据节点或k无效)
    if (list == NULL || list->next == NULL || k <= 0) {
        return 0;
    }
    // 步骤2:第一次遍历——统计链表数据节点总长度
    int len = 0;                  // 链表数据节点总数
    Node *p = list->next;         // p指向第一个数据节点,跳过表头
    while (p != NULL) {
        len++;                    // 每遍历一个节点,长度加1
        p = p->next;
    }
    // 步骤3:判断k是否超出链表长度(无对应节点)
    if (k > len) {
        return 0;
    }
    // 步骤4:计算正数位置,第二次遍历——定位倒数第k个节点
    int targetPos = len - k + 1;  // 倒数第k个节点对应的正数位置
    p = l...
    
    
登录后发布评论
暂无评论,来抢沙发