文章
58
粉丝
253
获赞
1
访问
22.1k
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...
登录后发布评论
暂无评论,来抢沙发