头结点为NULL,怎么用尾插吗
时间: 2024-05-05 18:17:56 浏览: 6
可以使用一个临时指针指向尾结点,然后将新节点插入到尾结点后面,并更新尾结点指针指向新节点。具体代码可以参考以下示例:
```c
struct Node {
int data;
struct Node* next;
};
void insertTail(struct Node** headRef, int newData) {
struct Node* newNode = (struct Node*) malloc(sizeof(struct Node));
newNode->data = newData;
newNode->next = NULL;
if (*headRef == NULL) { // 空链表,新节点为头结点
*headRef = newNode;
return;
}
struct Node* tail = *headRef;
while (tail->next != NULL) {
tail = tail->next; // 找到尾结点
}
tail->next = newNode; // 将新节点插入到尾结点后面
}
```
希望这个回答能够帮到你!
相关问题
使用尾插法建立带头结点的单链表
以下是使用尾插法建立带头结点的单链表的示例代码:
```c++
#include <iostream>
using namespace std;
typedef struct Node {
int data;
struct Node *next;
} ListNode, *LinkedList;
LinkedList createList() {
LinkedList head = new ListNode; // 创建头结点
head->next = NULL; // 初始化为空链表
ListNode *tail = head; // tail指向尾结点
int n;
cout << "请输入链表长度:";
cin >> n;
for (int i = 0; i < n; i++) {
int val;
cout << "请输入第" << i+1 << "个结点的值:";
cin >> val;
ListNode *newNode = new ListNode; // 创建新结点
newNode->data = val;
newNode->next = NULL;
tail->next = newNode; // 将新结点插入到尾结点之后
tail = newNode; // 更新尾结点
}
return head; // 返回头结点
}
void printList(LinkedList head) {
ListNode *p = head->next; // p指向首结点
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main() {
LinkedList L = createList();
cout << "创建的链表为:";
printList(L);
return 0;
}
```
在上述代码中,`createList()`函数使用尾插法建立带头结点的单链表。首先创建头结点`head`,将其`next`指针初始化为空链表。然后输入链表长度`n`,循环`n`次,每次输入一个结点的值`val`,创建一个新结点`newNode`,将其插入到尾结点`tail`之后,更新尾结点为新结点。最后返回头结点`head`。
`printList()`函数用于输出链表中所有结点的值,从首结点开始遍历链表,依次输出每个结点的值。
在`main()`函数中,首先调用`createList()`函数创建一个链表`L`,然后调用`printList()`函数输出该链表中所有结点的值。
运行示例程序,输入链表长度为5,以及每个结点的值,得到如下输出:
```
请输入链表长度:5
请输入第1个结点的值:1
请输入第2个结点的值:2
请输入第3个结点的值:3
请输入第4个结点的值:4
请输入第5个结点的值:5
创建的链表为:1 2 3 4 5
```
C语言使用尾插法建立带头结点的单链表
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node, *LinkedList;
LinkedList createLinkedList(); // 创建链表
void printLinkedList(LinkedList list); // 打印链表
void freeLinkedList(LinkedList list); // 释放链表
int main() {
LinkedList list = createLinkedList();
printLinkedList(list);
freeLinkedList(list);
return 0;
}
LinkedList createLinkedList() {
LinkedList head = (LinkedList)malloc(sizeof(Node)); // 创建头结点
head->next = NULL; // 头结点不存放数据
LinkedList tail = head; // tail指向尾结点
int data;
while (scanf("%d", &data) != EOF) {
LinkedList newNode = (LinkedList)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
tail->next = newNode; // 尾结点指向新结点
tail = newNode; // tail指向新的尾结点
}
return head;
}
void printLinkedList(LinkedList list) {
LinkedList p = list->next; // p指向第一个结点
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void freeLinkedList(LinkedList list) {
LinkedList p = list;
while (p != NULL) {
LinkedList q = p->next;
free(p);
p = q;
}
}
```
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)