用头插法和尾插法创建单链表
时间: 2023-05-23 13:05:58 浏览: 87
实现创销添删,头插法和尾插法建表,遍历single-chain-list-master.zip
A:
头插法创建单链表的步骤如下:
1. 新建一个头结点,其指针域为空。
2. 依次读入数据,新建一个结点,并将其插入到链表的头部。
代码如下:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* createList() {
ListNode *head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL; // 初始化头结点
int x;
while (scanf("%d", &x) != EOF) {
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = x;
newNode->next = head->next;
head->next = newNode;
}
return head;
}
int main() {
ListNode *head = createList();
head = head->next; // 链表头结点包含无用信息,需要去掉
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
return 0;
}
```
尾插法创建单链表的步骤如下:
1. 新建一个头结点,其指针域为空。
2. 定义一个指针p指向头结点。
3. 依次读入数据,每读入一个数据新建一个结点,并将其插入到链表的尾部。插入完成后,将p指向新建的结点。
代码如下:
```
ListNode* createList() {
ListNode *head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL; // 初始化头结点
ListNode *p = head; // 初始指向头结点
int x;
while (scanf("%d", &x) != EOF) {
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = x;
newNode->next = NULL; // 将新结点的指针域设为空
// 将新结点插入到链表尾部
p->next = newNode;
p = p->next; // p指向新结点
}
return head;
}
```
其中,scanf("%d", &x) != EOF 表示当未到达文件结束符时循环读入整数。在Windows命令行下, 文件结束符可以通过按 Ctrl+Z 或 F6 来输入。在Linux系统下,文件结束符可以通过按 Ctrl+D 来输入。
阅读全文