下面是C语言数据结构实现链表逆序并输出的完整攻略。
1. 题目分析
本题目要求实现对链表的逆序,并依次输出各节点的值。而链表的逆序可以通过改变各节点之间的连接方式来实现。
2. 思路分析
- 创建一个指针,指向原链表的头结点。
- 遍历链表,将每个节点的next指针指向它前面的节点,从而实现链表的逆序。
- 遍历逆序后的链表,从头结点开始,依次输出每个节点的值。
3. 代码实现
以下是C语言实现链表逆序并输出的代码示例:
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node *next;
};
//创建新节点并初始化
struct node *newNode(int val){
struct node *p = (struct node*)malloc(sizeof(struct node));
p->data = val;
p->next = NULL;
return p;
}
//构建链表
struct node *createList(int arr[], int n){
struct node *head, *tail, *p;
head = tail = NULL;
for(int i = 0; i < n; i++){
p = newNode(arr[i]);
if(head == NULL){
head = tail = p;
}else{
tail->next = p;
tail = p;
}
}
return head;
}
//链表逆序
struct node *reverseList(struct node *head){
struct node *prev, *curr, *next;
if(head == NULL || head->next == NULL){
return head;
}
prev = NULL;
curr = head;
next = head->next;
while(curr != NULL){
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
//输出链表
void printList(struct node *head){
while(head != NULL){
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
//主函数
int main(){
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
struct node *head, *newHead;
head = createList(arr, n);
printf("原链表:");
printList(head);
newHead = reverseList(head);
printf("逆序后链表:");
printList(newHead);
return 0;
}
4. 示例说明
以下是两组输入输出示例:
示例一
输入:
arr = {1, 2, 3, 4, 5}
n = 5
输出:
原链表:1 2 3 4 5
逆序后链表:5 4 3 2 1
示例二
输入:
arr = {2, 3, 5, 8, 9, 1, 4}
n = 7
输出:
原链表:2 3 5 8 9 1 4
逆序后链表:4 1 9 8 5 3 2
以上就是该问题的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言数据结构实现链表逆序并输出 - Python技术站