#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode
{
int v;
struct ListNode * next;
}node;
node * add(node * head,int x)
{
node * p = head;
node * r = (node*)malloc(sizeof(node));
r->next=NULL;
r->v=x;
if(!p)
return r;
while(p->next!=NULL)
{
p=p->next;
}
p->next=r;
return head;
}
void print(node* head)
{
node * p=head;
while(p)
{
printf("%d\n",p->v);
p=p->next;
}
}
node * revers(node * head)
{
node * p = head;
if(!p)
return NULL;
p = head->next;
head->next=NULL;
while(p)
{
node * tmp = p->next;
p->next=head;
head = p;
p = tmp;
}
return head;
}
void printl(node* head)
{
if(!head)
return;
if(head->next)
printl(head->next);
printf("%d\n",head->v);
}
node * revc(node * head,node * old)
{
if(!head)
return head;
if(!head->next)
{
head->next=old;
return head;
}
if(head->next)
{
node * tmp = head->next;
head->next=old;
return revc(tmp,head);
}
}
int main()
{
node * head=NULL;
for(int i=0;i<10;i++)
head = add(head,i);
print(head);
head = revers(head);
print(head);
head =revc(head,NULL);
print(head);
return 0;
}
revers是非递归的,revc是递归的。
链表的就地逆置(递归+非递归)
最新推荐文章于 2022-07-30 18:06:49 发布