LeetCode 206——反转链表
对单链表进行反转有迭代法和递归法两种。
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」!

LeetCode 206——反转链表的更多相关文章
- LeetCode 206. 反转链表(Reverse Linked List) 16
		
206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...
 - 每天一道面试题LeetCode 206 -- 反转链表
		
LeetCode206 反转链表 思路 代码 # # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # https://leetco ...
 - leetCode:206 反转链表
		
206. 反转链表 题目:反转一个单链表. 进阶:链表可以迭代或递归地反转.你能否两个都实现一遍? 非递归代码: class Solution { public ListNode reverseLis ...
 - Java实现 LeetCode 206 反转链表
		
206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL ...
 - leetcode 206. 反转链表 及 92. 反转链表 II
		
206. 反转链表 问题描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1-> ...
 - LeetCode 206.反转链表(Python3)
		
题目: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶:你可 ...
 - leetcode 206 反转链表 Reverse Linked List
		
C++解法一:迭代法,使用前驱指针pre,当前指针cur,临时后继指针nxt: /** * Definition for singly-linked list. * struct ListNode { ...
 - Leetcode春季打卡活动 第二题:206. 反转链表
		
Leetcode春季打卡活动 第二题:206. 反转链表 206. 反转链表 Talk is cheap . Show me the code . /** * Definition for singl ...
 - LeetCode 92. 反转链表 II(Reverse Linked List II)
		
92. 反转链表 II 92. Reverse Linked List II 题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. LeetC ...
 
随机推荐
- javascript对字符串的常见操作trim,ltrim,rtrim,isEmpty,isFloat等
			
1.验证字符串是否为空格.是否包含非法字符. //验证是否字符串有非法字符 function v_invalide_char(value,msg){ var arr = ['#','@','!','$ ...
 - HTML5标签应用
			
<!doctype html> <html> <head> <style> /* *{border:1px solid red;height:20px} ...
 - Zookeeper watch参照表
			
Watcher 设置是开发中最常见的,需要搞清楚watcher的一些基本特征,对于exists.getdata.getchild对于节点的不同操 作会收到不同的 watcher信息.对父节点的变更以及 ...
 - C# Pascal 命名规则
			
在以前版本的Visual Studio中,微软曾建议使用匈牙利命名法来写代码,并鼓励开发这位写出统一格式的代码而使用相同的法则.在最近发布的.NET和它的编程语言中,微软更换了他的这一法则.如果你用过 ...
 - ng-repeat 指令(带有数组)
			
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
 - Gitlab简单使用指南
			
原文链接 一.在gitlab的网站创建一个project 定一个项目名,选定相关的项目设置,private,public等 项目创建成功后,得到项目git@XXX.git的地址,可用于将project ...
 - Golang学习笔记(一)
			
一段基础的go语言代码解析 package main import "fmt" func main(){ fmt.Println("hello golang") ...
 - vue入门: 实现选中并显示修改功能
			
1.实现功能 2.工具 vue 3.代码 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
 - flexible.js在华某为手机上使用rem时,页面宽度超出手机屏幕宽度
			
问题:手机端项目在华为的某款手机上显示时页面内容没有自适应手机宽度,出现横向滚动条 原因:手机获取手机屏幕宽度并计算出rem时出现偏差,明显宽余真实手机屏宽度 解决方案一:在页面里获取页面最外层dom ...
 - 《瞿葩的数字游戏》T3-三角圣地(Lucas)
			
题目背景 国王1带大家到了数字王国的中心:三角圣地. 题目描述 不是说三角形是最稳定的图形嘛,数字王国的中心便是由一个倒三角构成.这个倒三角的顶端有一排数字,分别是1~N.1~N可以交换位置.之后的每 ...