链表逆序
2016-08-23 12:41
120 查看
Java 循环操作 详细思路(转)
c++//方法2/*struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};*/class Solution {public: ListNode* ReverseList(ListNode* head) { if(head==NULL) return NULL; //head为当前节点,如果当前节点为空的话,那就什么也不做,直接返回null; ListNode* pre = NULL; ListNode* next = NULL; //当前节点是head,pre为当前节点的前一节点,next为当前节点的下一节点 //需要pre和next的目的是让当前节点从pre->head->next1->next2变成pre<-head next1->next2 //即pre让节点可以反转所指方向,但反转之后如果不用next节点保存next1节点的话,此单链表就此断开了 //所以需要用到pre和next两个节点 //1->2->3->4->5 //1<-2<-3 4->5 while(head!=NULL){ //做循环,如果当前节点不为空的话,始终执行此循环,此循环的目的就是让当前节点从指向next到指向pre //如此就可以做到反转链表的效果 //先用next保存head的下一个节点的信息,保证单链表不会因为失去head节点的原next节点而就此断裂 next = head->next; //保存完next,就可以让head从指向next变成指向pre了,代码如下 head->next = pre; //head指向pre后,就继续依次反转下一个节点 //让pre,head,next依次向后移动一个节点,继续下一次的指针反转 pre = head; head = next; } //如果head为null的时候,pre就为最后一个节点了,但是链表已经反转完毕,pre就是反转后链表的第一个节点 //直接输出pre就是我们想要得到的反转后的链表 return pre; }};c++//方法3 excited/*struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};*/class Solution {public: ListNode* ReverseList(ListNode* head) { if(head==NULL) return NULL; //head为当前节点,如果当前节点为空的话,那就什么也不做,直接返回null; ListNode* pre = NULL; ListNode* next = NULL; next = head->next; //当前节点是head,pre为当前节点的前一节点,next为当前节点的下一节点 //需要pre和next的目的是让当前节点从pre->head->next1->next2变成pre<-head next1->next2 //即pre让节点可以反转所指方向,但反转之后如果不用next节点保存next1节点的话,此单链表就此断开了 //所以需要用到pre和next两个节点 //1->2->3->4->5 //1<-2<-3 4->5 while(head!=NULL){ //做循环,如果当前节点不为空的话,始终执行此循环,此循环的目的就是让当前节点从指向next到指向pre //如此就可以做到反转链表的效果 //先用next保存head的下一个节点的信息,保证单链表不会因为失去head节点的原next节点而就此断裂 //保存完next,就可以让head从指向next变成指向pre了,代码如下 head->next = pre;//反向链接 //head指向pre后,就继续依次反转下一个节点 //让pre,head,next依次向后移动一个节点,继续下一次的指针反转 pre = head; head = next; next = head->next; } //如果head为null的时候,pre就为最后一个节点了,但是链表已经反转完毕,pre就是反转后链表的第一个节点 //直接输出pre就是我们想要得到的反转后的链表 return pre; }}; head->next = pre; (存储谁的地址(等于谁的地址)就指向谁)。所以该句的意思是: head->next —指向—》 pre;
相关文章推荐
- 链表创建 然后逆序 然后输出 上机测试题
- 从尾到头打印链表(五种方法包括链表翻转、递归、栈、容器逆序)
- 【数据结构】用C++实现双循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 将单向链表逆序
- 华为机试题(8)--单向链表的建立,反转(逆序),遍历显示,删除
- 剑指offer 链表的逆序
- C/C++用递归的方法求链表逆序
- 面试题:用一个临时变量实现单链表逆序
- 单链表逆序输出C++ (stack方法、双向链表方法以及vector方法)
- 数据结构实验之链表二:逆序建立链表
- sdutacm-数据结构实验之链表二:逆序建立链表
- 递归逆序输出链表
- 链表逆序
- 单链表逆序、反转
- 将一个链表按逆序排列
- 括链表的创建,增加、删除节点,链表的逆序、排序和销毁
- 单链表反转(逆序)
- 链表的逆序
- 单链表逆序
- 将一个单向链表逆序