用户给定一个数组,用数组中元素创建链表并翻转。
#include<stdio.h>
#include<stdlib.h>
//单链表节点的定义
typedef struct Node
{
int val;
struct Node *next; /*此处用 ListNode *next 会出现编译错误*/
}ListNode;
//单链表的打印
void display(ListNode *List)
{
ListNode *it;
it=List;
while(NULL != it)
{
printf("%d-->",it->val);
it=it->next;
}
printf("\n");
}
//单链表的创建
ListNode *CreatList(int A[],int length)
{
ListNode *List;
ListNode *head=(ListNode *)malloc(sizeof(ListNode));
int i;
head->val=A[0];
head->next=NULL;
List=head;
for(i=1;i<length;i++)
{
ListNode *temp=(ListNode *)malloc(sizeof(ListNode));
List->next=temp;
List=temp;
List->val=A[i];
List->next=NULL;
}
return head;
}
//单链表的翻转
//翻转链表,经典的三指针法,记录当前节点(翻转用)、前一个节点、后一个节点(翻转之后前进用)
ListNode *ReverseList(ListNode *List)
{
ListNode *pre,*cur,*next;
if(NULL==List)
{
return NULL;
}
pre=NULL;
cur=List;
while(NULL!=cur)
{
next=cur->next;
cur->next=pre;
pre=cur;
cur=next;
}
return pre;
}
//验证程序
int main()
{
int A[]={1,2,3,4,5,6,7};
int length=sizeof(A)/sizeof(int);
ListNode *List,*RevList;
List=CreatList(A,length);
display(List);
RevList=ReverseList(List);
display(List);
display(RevList);
return 0;
}