题目:
【题目描述】
从键盘输入n个数字(n < 100),组成一个链表。将此链表反序之后输出。
【输入描述】
输入包括两行,第一行1个数字n,表示要输入的数字的个数,第二行有连续n个数字
【输出描述】
输出只有一行,有n个反序后的数字,每个数字之间用一个空格间隔
【输入样例】
8
4 5 7 8 1 2 3 6
【输出样例】
6 3 2 1 8 7 5 4
重点提炼:
//将链表逆序反转
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* prev=NULL;
struct ListNode* cur=head;
while (cur)
{
struct ListNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
完整代码:
#include <stdio.h>
#include<stdlib.h>
struct ListNode
{
int data;
struct ListNode* next;
};
//读入n个整数,构成链表
struct ListNode* CreatLink(int n);
//输出链表
void PrintLink(struct ListNode* head);
//将链表逆序反转
struct ListNode* reverseList(struct ListNode* head);
int main()
{
int n;
scanf("%d", &n);
struct ListNode* A = CreatLink(n);
struct ListNode* B = reverseList(A);
PrintLink(B);
return(0);
}
//读入n个整数,构成链表
struct ListNode* CreatLink(int n)
{
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* pmove = (struct ListNode*)malloc(sizeof(struct ListNode));
scanf("%d", &head->data);
head->next = NULL;
pmove = head;
for (int i = 0; i < n - 1; i++)
{
struct ListNode* newnode = (struct ListNode*)malloc(sizeof(struct ListNode));
pmove->next = newnode;
scanf("%d", &newnode->data);
newnode->next = NULL;
pmove = pmove->next;
}
return head;
}
//将链表逆序反转
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* prev=NULL;
struct ListNode* cur=head;
while (cur)
{
struct ListNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
//输出链表
void PrintLink(struct ListNode* head)
{
struct ListNode* pmove = (struct ListNode*)malloc(sizeof(struct ListNode));
pmove = head;
while (pmove)
{
printf("%d ", pmove->data);
pmove = pmove->next;
}
}
结果: