单链表的逆转:迭代形式和递归形式
来源:互联网 发布:下载ppt的软件 编辑:程序博客网 时间:2024/06/05 02:23
struct Node{ int num; Node *next;}; // 注意这个地方,这个分号占一半的分!!!
1.迭代版的:(明明知道是这样子,但写的时候,要想很久,常考,背!!!)
/* 注意 head是头结点 */Node *ReverseLink( Node *head){ if(NULL == head) return NULL; Node *p, *q; p = head->next; head->next = NULL; while(p) { q = p->next; // p指向链表的第一个结点 p->next = head->next; // 利用头插法将结点依次插入到链表的头部 head->next = p; p = q; } return head;}
简单描述一下,每次取一个结点p(p指向的节点,我们简称p),让这个结点指向head的下一位,同时让head指向p,就是这么简单,其实就是一个头插法,把后面的结点依次插入到最前面。
这里需要注意的是,最开始取的结点p,是head是下一位,然后操作是,p指向本身,然后head指向p。没毛病~。
2. 递归版:
/* 这里的head不是头结点,是第一个结点*/Node *Reverse_Link_Recursive(Node *head){ if(head == NULL || head->next == NULL) return head; Node* p1 = head; Node* p2 = p1->next; //p2其实记录的下一步递归过程后的尾结点 Head = recursive_Link(p2); p2->next = p1; p1->next = NULL; return head; }
阅读全文
0 0
- 单链表的逆转:迭代形式和递归形式
- 写代码,反转一个单链表,分别以迭代和递归的形式来实现
- 【C++】二分查找的递归形式和非递归形式
- 折半查找法的递归和非递归形式
- 算法_二分查找的递归和非递归形式
- 阶乘的尾递归形式
- 递归形式的快速排序
- 杨辉三角----直角和对称形式,递归形式
- 二叉树的前序、中序、后序遍历的算法(递归形式和非递归形式)
- C++ 链表的递归逆转和循环逆转
- lamada形式处理递归的通用方法
- 二叉树的遍历非递归形式
- 树的遍历:非递归形式
- 函数中递归的变现形式
- 快速排序的非递归形式
- 背包问题的递归形式解
- 二叉树三种遍历的非递归形式
- 二叉树的遍历(非递归形式)
- android 自定义控件样式点击效果实现
- Java多线程--ExecutorService的使用
- Ubuntu 无法使用 root 用户进行 SSH 登录
- springmvc静态资源配置
- hive命令出现问题Failed with exception Java.io.IOException:java.lang.IllegalArgumentException: java.NET.UR
- 单链表的逆转:迭代形式和递归形式
- 404、500、502等HTTP状态码介绍
- C++全排列 next_permutation
- 在ListWidget中添加自定义的Item
- java复制文件的4种方式
- Object中hashcode(),equal()方法需要重写的时期
- 数据库---操作表结构与表数据的常用sql命令
- Planning(贪心)
- 差分隐私保护技术