程序实现了一个单链表的逆序。请完成函数list_reverse()。
函数接口定义:
Node* list_reverse(Node* head)
head是单链表的头指针,函数返回逆序后的头指针。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct ListNode
{
int num;
struct ListNode *next;
}Node;
Node *createlist();
/*根据用户输入的整数n,创建具有n个结点的单链表。裁判实现,细节不表*/
Node* list_reverse(Node* head);
void display(Node *head);
/*输出链表结点的数据域。裁判实现,细节不表*/
int main(void)
{ Node *head,*p;
head = createlist();
head = list_reverse(head);
display(head);
return 0; }
/* 请在这里填写答案 */
输入样例:
5
1 2 3 4 5
输出样例:
在这里给出相应的输出。例如:
5 4 3 2 1
思路其实很简单,只要将原链表顺序遍历,将数据用头插法写入新链表即可。
Node* list_reverse(Node* head)
{
Node *head1=NULL;//遍历原单链表 用头插法创建新链表
Node *p=head;
Node *pnew=NULL;
while(p!=NULL)
{
pnew=(Node *)malloc(sizeof(Node));
pnew->num=p->num;
pnew->next=head1;
head1=pnew;
p=p->next;
}
return head1;
}