博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 206——反转链表
阅读量:7029 次
发布时间:2019-06-28

本文共 1861 字,大约阅读时间需要 6 分钟。

对单链表进行反转有迭代法和递归法两种。

1. 迭代法

  • 迭代法从前往后遍历链表,定义三个指针分别指向相邻的三个结点,反转前两个结点,即让第二个结点指向第一个结点。然后依次往后移动指针,直到第二个结点为空结束,再处理链表头尾即可。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {
public: ListNode* reverseList(ListNode* head) { if (head == NULL || head->next == NULL) // 空链或只有一个结点,直接返回头指针 { return head; } else // 至少有两个结点 { ListNode * p1 = head; // 第一个结点 ListNode * p2 = p1->next; // 第二个结点 ListNode * p3 = p2->next; // 第三个结点 while (p2) // 第二个结点为空,到链尾,结束 { p3 = p2->next; p2->next = p1; // 第二个结点指向第一个结点,进行反转 p1 = p2; // 第一个结点往后移 p2 = p3; // 第二个结点往后移 } head->next = NULL; // 第一个结点也就是反转后的最后一个节点指向 NULL head = p1; // 头结点指向反转后的第一个节点 return head; } }};复制代码

2. 递归法

  • 基线条件:空链或只有一个结点,直接返回头指针
  • 递归条件:递归调用,返回子链表反转后的头指针

Solution {public:    ListNode* reverseList(ListNode* head) {            if (head == NULL || head->next == NULL)     // 空链或只有一个结点,直接返回头指针        {            return head;                    }        else                                        // 有两个以上结点        {            ListNode *new_head = reverseList(head->next); // 反转以第二个结点为头的子链表                        // head->next 此时指向子链表的最后一个结点                        // 将之前的头结点放入子链尾            head->next->next = head;            head->next = NULL;                        return new_head;        }    }};复制代码

获取更多精彩,请关注「seniusen」!

转载地址:http://inwal.baihongyu.com/

你可能感兴趣的文章
iOS之自定义tabBar
查看>>
Spring boot学习(三) Spring boot整合mybatis
查看>>
Redux 源码深度解析(附带视频1月14号上传)
查看>>
理解webpack原理,手写一个100行的webpack
查看>>
Node.js & Express 项目基本搭建
查看>>
掌握 MySQL 这 19 个骚操作,效率至少提高3倍
查看>>
【跃迁之路】【744天】程序员高效学习方法论探索系列(实验阶段501-2019.3.6)...
查看>>
用于大数据测试、学习的测试数据
查看>>
Software System Analysis and Design | 1
查看>>
JavaScript函数式编程,真香之组合(一)
查看>>
JavaScript链式调用实例浅析
查看>>
报表没完没了怎么办? | 润乾集算器提效报表开发
查看>>
记一次Hexo迁移
查看>>
RESTful API 中的 Status code 是否要遵守规范
查看>>
第十一天-《企业应用架构模式》-对象-关系行为模式
查看>>
[spring boot] jdbc
查看>>
新的开始!
查看>>
区块链— 比特币中的区块、账户验证和记账
查看>>
Electron打包,NSIS修改默认安装路径
查看>>
分享一些好用的网站
查看>>