单链表的反转
2016-06-26 11:07
239 查看
反转单链表。假设单链表的数据结构定义如下:
typedef struct LNode
{
int data;
struct LNode *next;
}LNode, *LinkedList;
方法一:使用三个指针遍历单链表,逐个链接点进行反转。
一个结点记录当前遍历的结点,一个结点记录前一个结点,一个结点记录下一个结点。
方法二:(递归)
递归的实现方式主要有4步:
1)如果head为空,或者只有head这一个节点,return head即可;
2)先遍历head->next为首的链表,得到一个头结点newHead;
3)把head赋值给head->next->next, head->next为空;
4)返回newHead。
代码:
typedef struct LNode
{
int data;
struct LNode *next;
}LNode, *LinkedList;
方法一:使用三个指针遍历单链表,逐个链接点进行反转。
一个结点记录当前遍历的结点,一个结点记录前一个结点,一个结点记录下一个结点。
Node* ReverseList1(Node *Ptr) { Node *pre = NULL; Node *Current = Ptr; Node *pnext = NULL; while ( Current != NULL){ pnext = Current->next; Current->next = pre; pre = Current; Current = pnext; } return pre; }
方法二:(递归)
递归的实现方式主要有4步:
1)如果head为空,或者只有head这一个节点,return head即可;
2)先遍历head->next为首的链表,得到一个头结点newHead;
3)把head赋值给head->next->next, head->next为空;
4)返回newHead。
代码:
node* reverseList2(node* head) { if(head == NULL || head->next == NULL) return head; node* newHead = reversedList2(head->next); head->next->next = head; head->next = NULL; return newHead; }
相关文章推荐
- js文件报错,去除js验证
- (转)LRC歌词编辑攻略2
- Laravel请求和输入
- Junit使用教程(四)
- acm之递归题目7
- linux下QtCreator安装、配置、使用QWT
- (转)LRC歌词编辑攻略1
- Junit使用教程(三)
- 数据挖掘算法:k-means算法的C++实现
- 网站后端.Flask.实战-社交博客开发-注册用户?
- ViewFlipper
- Windows下的Socket网络编程小实战
- Junit使用教程(二)
- 歌词播放的原理
- 【转】MyEclipse开发Web项目发布到Tomcat下的Root目录
- swift 之 数组集合字典的简单使用
- 什么是 MIME TYPE?
- Junit使用教程(一)
- [疯狂Java]面向对象:常量池、equals标准模板
- acm之递归题目6