头插法建立单聊表c语言代码
时间: 2023-08-01 10:10:58 浏览: 81
以下是使用头插法建立单链表的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域
} Node;
// 头插法建立单链表
Node* createLinkedList() {
Node* head = NULL; // 头节点指针初始化为空
int data;
printf("请输入链表元素(输入-1结束):");
while (1) {
scanf("%d", &data);
if (data == -1) {
break; // 输入-1时结束循环
}
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = data; // 给新节点赋值
newNode->next = head; // 将新节点的next指向当前头节点
head = newNode; // 更新头节点为新节点
}
return head; // 返回头节点指针
}
// 查找单链表中的倒数第k个元素
int findKthFromEnd(Node* head, int k) {
if (head == NULL || k <= 0) {
return -1; // 链表为空或k小于等于0时,返回-1表示错误
}
Node* p1 = head;
Node* p2 = head;
int count = 0;
while (count < k && p1 != NULL) {
p1 = p1->next;
count++;
}
if (count < k) {
return -1; // 链表长度小于k时,返回-1表示错误
}
while (p1 != NULL) {
p1 = p1->next;
p2 = p2->next;
}
return p2->data; // 返回倒数第k个元素的值
}
int main() {
Node* head = createLinkedList();
int k;
printf("请输入要查找的倒数第k个元素:");
scanf("%d", &k);
int result = findKthFromEnd(head, k);
if (result == -1) {
printf("输入错误!\n");
} else {
printf("倒数第%d个元素的值为:%d\n", k, result);
}
return 0;
}
```
你可以根据需要修改该代码,并根据提示输入链表元素和要查找的倒数第k个元素。程序将打印出倒数第k个元素的值。
阅读全文