#include
#include
// 定义链表节点
typedef struct Node {
int data;
struct Node *next;
} Node;
int main() {
int k, num;
Node *head = NULL, *tail = NULL, *fast, *slow;
// 读取K值并判断合法性
if (scanf("%d", &k;) != 1 || k <= 0) {
printf("NULL\n");
return 0;
}
// 构建链表(边读边存,无单独函数)
while (scanf("%d", #) == 1 && num >= 0) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = num;
newNode->next = NULL;
head ? (tail->next = newNode, tail = newNode) : (head = tail = newNode);
}
// 双指针查找倒数第K项
fast = slow = head;
for (int i = 0; i < k; i++) {
if (!fast) { printf("NULL\n"); return 0; }
fast = fast->next;
}
while (fast) { fast = fast->next; slow = slow->next; }
// 输出结果
slow ? printf("%d\n", slow->data) : printf("NULL\n");
// 释放内存(简化版释放,无单独函数)
Node *tmp;
while (head) { tmp = head; head = head->next; free(tmp); }
return 0;
}
点赞 (1)
回复