请创建动态链表,存储整型数据1-10(提示:每个结点存一个整数),并编写代码输出链表尾结点的前驱结点(倒数第二个结点)
时间: 2024-01-21 08:03:03 浏览: 20
好的,根据您的要求,我来给您创建一个动态链表,并输出链表尾结点的前驱结点。
动态链表是一种常见的数据结构,它的特点是可以动态地添加、删除结点,非常灵活。下面是使用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结点类型
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建链表函数,返回链表头指针
Node* createList() {
Node* head = NULL; // 头指针初始值为NULL
Node* tail = NULL; // 尾指针初始值为NULL
int i;
for (i = 1; i <= 10; i++) { // 添加10个结点
Node* p = (Node*)malloc(sizeof(Node)); // 创建新结点
p->data = i; // 新结点数据为i
p->next = NULL;
if (head == NULL) { // 空链表,新结点为头结点
head = p;
tail = p;
} else { // 非空链表,新结点插入尾部
tail->next = p;
tail = p;
}
}
return head;
}
// 输出链表尾结点的前驱结点
void printSecondLast(Node* head) {
Node* p = head;
if (p == NULL || p->next == NULL) { // 链表为空或只有一个结点
printf("链表为空或只有一个结点,无法输出倒数第二个结点\n");
return;
}
while (p->next->next != NULL) { // 遍历到倒数第二个结点
p = p->next;
}
printf("链表尾结点的前驱结点为:%d\n", p->data);
}
// 主函数
int main() {
Node* head = createList(); // 创建链表
printSecondLast(head); // 输出链表尾结点的前驱结点
return 0;
}
```
运行结果如下:
```
链表尾结点的前驱结点为:9
```
希望能够帮助到您,如有其他问题,请随时提出。