您的位置:首页 > 其它

链表的就地逆置(递归+非递归)

2014-04-19 17:01 239 查看
#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是递归的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: