题目分析:本题要求对一个单链表进行反转,我采用的方法是创建一个新链表,遍历待返转链表的每一个节点,并将其头插到新链表中,从而使链表被翻转
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode LN;
LN*get_tail(LN*head)
{
LN*pcur=head;
while((pcur->next)->next)
{
pcur=pcur->next;
}
return pcur;
}
void headadd(LN**head,int data)
{
assert(head);
if(*head==NULL)
{
*head=(LN*)malloc(sizeof(LN));
if((*head)==NULL)
{
perror("malloc");
exit(1);
}
(*head)->val=data;
}
else
{
LN*new=(LN*)malloc(sizeof(LN));
if(new==NULL)
{
perror("malloc");
exit(1);
}
new->next=(*head);
new->val=data;
(*head)=new;
}
}
struct ListNode* reverseList(struct ListNode* head)
{
if(head==NULL)
return head;
LN*new=(LN*)malloc(sizeof(LN));
if(new==NULL)
{
perror("malloc");
exit(1);
}
new->val=1;
new->next=NULL;
LN*pcur=head;
while(pcur)
{
headadd(&new,pcur->val);
pcur=pcur->next;
}
LN*tail=get_tail(new);
free(tail->next);
tail->next=NULL;
return new;
}
测试结果: