反转一个单链表,分别以迭代和递归的形式来实现
2012-10-04 19:08
579 查看
迭代法:
递归法:
// 反转单链表.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include <stdlib.h> typedef struct node { int data; struct node *next; }linknode,*linklist; linknode *reverse(linknode *head)//带有头结点的单链表迭代反转,非递归方法 //思路:将当前结点的next指向前驱;当前结点指向next { if(head==NULL) return 0; linknode *pre,*cur,*ne;//pre 前驱结点指针;cru当前结点指针;ne后继指针 pre=head; cur=head->next; while(cur!=NULL) { ne=cur->next; cur->next=pre; pre=cur; cur=ne; } linknode *q; q=head->next; q->next=NULL; head->next=pre; return head; } void printLinkList_H(linklist L) //打印 { linklist p; p=L->next; while(p) { printf("%4d", p->data); p = p->next; } printf("\n"); } void main() { int i; linklist L = (linklist)malloc(sizeof(linknode)); L->next = NULL; //头结点 for(i = 1;i<=5;i++)//新建一个带头结点的单链表 { linklist p = (linklist)malloc(sizeof(linknode)); p->data = i; p->next = L->next; L->next = p; } printLinkList_H(L); reverse(L); printLinkList_H(L); }
递归法:
// 反转单链表.cpp 递归法 #include "stdafx.h" #include <stdlib.h> typedef struct node { int data; struct node *next; }linknode,*linklist; linknode *RecReverseList(linknode *head) { if (head==NULL) return 0; linknode *curr , *reverse_head , *temp; if(head->next==NULL) return head; else { curr=head; temp=head->next; reverse_head=RecReverseList(temp); } temp->next=curr; curr->next=NULL; return reverse_head; } void printLinkList_H(linklist L) //打印 { linklist p; p=L->next; while(p) { printf("%4d", p->data); p = p->next; } printf("\n"); } void main() { int i; linklist L = (linklist)malloc(sizeof(linknode)); L->next = NULL; //头结点 for(i = 1;i<=5;i++)//新建一个带头结点的单链表 { linklist p = (linklist)malloc(sizeof(linknode)); p->data = i; p->next = L->next; L->next = p; } printLinkList_H(L); linklist q; q=RecReverseList(L->next); while(q) { printf("%4d", q->data); q = q->next; } }
相关文章推荐
- 写代码,反转一个单链表,分别以迭代和递归的形式来实现
- 反转一个单链表,迭代和递归实现
- 反转一个单链表的循环和递归实现
- 反转一个单链表的循环和递归实现
- 编写查找一个单链表特定元素的程序。分别使用递归和非递归方法实现,并比较它们的运行时间。
- 试编写一个函数,返回一颗给定二叉树在中序遍历下的最后一个节点(分别用递归和非递归实现)
- 反转链表:迭代和递归的实现
- 递归,迭代,堆栈三种方式实现单链表反转(C++)
- 反转链表的迭代实现和递归实现
- 分别使用递归和迭代实现快速排序
- 每天一个JavaScript实例-递归实现反转数组字符串
- 二叉树的镜像--递归和迭代分别实现
- 每天一个JavaScript实例-递归实现反转数组字符串
- 单链表反转的递归实现(Reversing a Linked List in Java, recursively)
- 编写一个函数实现n^k,分别使用递归和非递归实现
- 单链表反转的递归实现(Reversing a Linked List in Java, recursively)
- 合并两个排序链表--迭代和递归分别实现
- 单链表的反转(用循环和递归实现单链表反转)
- [置顶] 单链表反转的递归与非递归实现
- 对一个字符串实现反转,如果存在分号或者逗号等,则按照符号分割分别进行反转