题目描述
输入一个链表,反转链表后,输出新链表的表头。
解答:
#include<stdio.h>
#include<malloc.h>
typedef struct ListNode{
int val;
struct ListNode* next;
}ListNode;
//利用一个数组,建立链表
ListNode* creatlinkistR(ListNode* head,int *dig,int Size)
{
head=(ListNode*)malloc(sizeof(ListNode));
head->next=NULL;
ListNode *p=NULL,*rear=head;
int i;
for(i=0;i<Size;i++)
{
p=(ListNode*)malloc(sizeof(ListNode));
p->next=NULL;
p->val=dig[i];
p->next=rear->next;
rear->next=p;
rear=p;
}
return head;
}
//输出链表
void putlinkst(ListNode* head)
{
ListNode* temp=head;
while(temp->next!=NULL)
{
temp=temp->next;
printf("%d\n",temp->val);
}
}
//反转链表
ListNode* ReverseList(ListNode* head)
{
if(head==NULL||head->next==NULL)
return head;
ListNode* newHead=(ListNode*)malloc(10*sizeof(ListNode));
newHead=NULL;
while(head!=NULL)
{
ListNode* temp=(ListNode*)malloc(10*sizeof(ListNode));
temp=head->next;
head->next=newHead;
newHead=head;
head=temp;
}
return newHead;
}
int main(int argc, const char *argv[])
{
printf("please input Size:\n");
int Size,num;
scanf("%d",&Size);
printf("plead input date:\n");
int *a=(int *)malloc((Size*sizeof(int)));
for(num=0;num<Size;num++)
{
scanf("%d",&a[num]);
}
ListNode* head=NULL;
head=creatlinkistR(head,a,Size);
//putlinkst(head);
printf("*********\n");
putlinkst(ReverseList(head));
return 0;
}