建立一个双链表,从链首开始,顺序显示链表中的所有结点的数据,然后从链尾开始,反序显示链表中所有结点的数据,最后将一个新结点插入到链表中。
时间: 2023-04-25 15:05:38 浏览: 104
好的,以下是中文回复:
首先,建立一个双链表需要定义一个结构体,包含数据域和两个指针域,分别指向前一个结点和后一个结点。然后,从链首开始遍历链表,依次输出每个结点的数据。接着,从链尾开始遍历链表,依次输出每个结点的数据。最后,可以通过新建一个结点,并将其插入到链表中来实现在链表中插入新数据。
具体实现过程可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义双链表结构体
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} Node;
// 创建新结点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
}
// 在链表尾部插入新结点
void insertNode(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
// 从链首开始遍历链表,输出每个结点的数据
void printListFromHead(Node* head) {
printf("链首开始遍历链表:\n");
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
// 从链尾开始遍历链表,输出每个结点的数据
void printListFromTail(Node* head) {
printf("链尾开始遍历链表:\n");
while (head->next != NULL) {
head = head->next;
}
while (head != NULL) {
printf("%d ", head->data);
head = head->prev;
}
printf("\n");
}
int main() {
Node* head = NULL;
insertNode(&head, 1);
insertNode(&head, 2);
insertNode(&head, 3);
insertNode(&head, 4);
insertNode(&head, 5);
printListFromHead(head);
printListFromTail(head);
insertNode(&head, 6);
printListFromHead(head);
printListFromTail(head);
return ;
}
```
输出结果为:
```
链首开始遍历链表:
1 2 3 4 5
链尾开始遍历链表:
5 4 3 2 1
链首开始遍历链表:
1 2 3 4 5 6
链尾开始遍历链表:
6 5 4 3 2 1
```
希望能对您有所帮助!
阅读全文