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

来源:互联网 发布:路边停车收费软件 编辑:程序博客网 时间:2024/05/01 20:13
#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是递归的。
0 0
原创粉丝点击