链表的就地逆置(递归+非递归)
来源:互联网 发布:路边停车收费软件 编辑:程序博客网 时间: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
- 链表的就地逆置(递归+非递归)
- 单链表就地逆置递归与非递归的方法
- 链表的逆置(用到递归和非递归)
- 单链表就地逆置的两种方法(递归与普通循环)
- 链表逆转(递归+非递归)
- 有序链表的合并(递归&非递归)
- 有序链表合并的递归和非递归算法
- 链表翻转的递归和非递归算法
- 链表合并的递归和非递归方法
- 链表的建立、输出、非递归反转、递归反转
- 有序链表合并的递归和非递归算法
- 链表反转的递归和非递归算法
- C++递归与非递归实现链表的反转
- 合并两个有序链表的递归与非递归
- 链表反转的递归和非递归实现方式
- 链表的各种递归非递归遍历
- 链表反转的递归和非递归实现方式
- 链表翻转的递归和非递归实现
- 【二叉树&层次遍历】Populating Next Right Pointers in Each Node
- 相交线
- VS2010 VS2012版最常用的快捷键
- [动态规划]UVA624 - CD
- Struts2通过自定义拦截器实现登录之后跳转到原页面
- 链表的就地逆置(递归+非递归)
- PLSQL无法连接数据库
- Java方法继承、方法重载、方法覆盖小总结
- Sqlserver 锁表处里
- 学习的内容
- 一个孤单无群的我
- ListView获得某行主键的方法
- 【二叉树&层次遍历】Populating Next Right Pointers in Each Node II
- 应用散列表和外拉链表统计文本中单词个数