逆序打印单链表

从尾到头打印单链表。


分析:利用递归的思想,依次访问到每一个结点,递归的出口为NULL. 然后依次打印就能逆序得出链表。

代码如下:

void LinkListReversePrint(LinkNode* head) {
	if(head == NULL) {
		//空链表
		return;
	}else{
		LinkListReversePrint(head->next);
	}
	printf("[%c|%p] ",head->data,head);
}

测试代码:

void TestReversePrint() {
	TEST_HEADER;
	LinkNode* head;
	LinkListInit(&head);

	LinkListPushBack(&head , 'a');
	LinkListPushBack(&head , 'b');
	LinkListPushBack(&head , 'c');
	LinkListPushBack(&head , 'd');
	LinkListPushBack(&head , 'e');

	LinkListPrintChar(head , "逆序打印链表");
	LinkListReversePrint(head);

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以按照以下步骤来实现单链表逆序建立: 1. 定义一个指向链表节点的指针p和一个中间节点的指针q,初始化p指向头节点,q指向NULL。 2. 依次遍历链表,每次将p节点从链表中摘下,并将其插入到q节点之前。 3. 将q指向p,继续遍历链表,直到p指向NULL。 4. 将尾节点指向NULL,新的逆序链表建立完成。 下面是逆序建立单链表的C语言实现代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct Node { int data; // 存储数据 struct Node *next; // 指向下一个节点 } Node; // 创建新节点 Node* createNode(int data) { Node *newNode = (Node*) malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; return newNode; } // 逆序建立单链表 Node* reverseList(Node *head) { Node *p = head, *q = NULL; // 定义指针p和q while (p) { Node *next = p->next; // 记录p的下一个节点 p->next = q; // 将p摘下,并插入到q节点之前 q = p; // 将q指向p p = next; // 将p指向下一个节点 } return q; // 返回新的链表头节点 } // 打印链表 void printList(Node *head) { Node *p = head; while (p) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { Node *head = createNode(1); head->next = createNode(2); head->next->next = createNode(3); head->next->next->next = createNode(4); printf("原链表:"); printList(head); head = reverseList(head); printf("逆序链表:"); printList(head); return 0; } ``` 输出结果为: ``` 原链表:1 2 3 4 逆序链表:4 3 2 1 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值