数据结构C语言设计一个算法,从右向左打印一个双链表中各个结点的值的完整代码
时间: 2024-10-14 14:05:18 浏览: 26
在 C 语言中,为了从右向左遍历并打印一个双链表(也称为双向链表)的节点值,我们需要定义链表节点结构体、创建头指针以及实现一个反向遍历的函数。以下是一个简单的实现:
```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));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = data;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
}
// 反向插入节点到链表末尾
void insertAtEnd(Node** head, int data) {
Node* newNode = createNode(data);
if (newNode == NULL) return;
if (*head == NULL) {
*head = newNode;
return;
}
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
// 反向遍历并打印节点值
void printListReverse(Node* head) {
if (head == NULL) {
printf("The list is empty.\n");
return;
}
Node* current = head;
while (current != NULL) {
printf("%d ", current->data); // 打印当前节点的数据
current = current->prev; // 移动到前一个节点
}
printf("\n"); // 结束行
}
int main() {
Node* head = NULL;
// 插入节点示例
insertAtEnd(&head, 5);
insertAtEnd(&head, 4);
insertAtEnd(&head, 3);
insertAtEnd(&head, 2);
insertAtEnd(&head, 1);
// 打印从右向左的顺序
printListReverse(head);
return 0;
}
```
这个程序首先定义了一个链表节点结构,然后提供了一个`insertAtEnd`函数用于在链表末尾添加节点,`printListReverse`函数负责反向遍历并打印节点值。在`main`函数中,我们创建了一个空链表,并插入了一些节点,最后调用`printListReverse`函数显示结果。
阅读全文