相关文章推荐
一直单身的台灯  ·  压缩感知与稀疏恢复matlab示例(附代码) ...·  5 月前    · 
一直单身的冰棍  ·  6合1多功能嬰兒輔食機·  6 月前    · 
博学的保温杯  ·  【极目新闻】谷爱凌喊你“好好吃饭”,专家指出 ...·  7 月前    · 
卖萌的自行车  ·  权威发布|2023软科中国大学专业排名|医学 ...·  8 月前    · 
失恋的仙人掌  ·  身材矮小原因多須把握治療黃金期- ...·  8 月前    · 
小百科  ›  Leetcode刷题 206. 转势链表 字符串编程两种方法做到-腾讯云开发者社区-腾讯云
递归 leetcode 递归算法 链表
爱搭讪的哑铃
2 年前
作者头像
一只胡说八道的猴子
0 篇文章

Leetcode刷题 206. 反转链表 递归迭代两种方法实现

原创
前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > Java系列学习与数据结构算法 > Leetcode刷题 206. 反转链表 递归迭代两种方法实现

Leetcode刷题 206. 反转链表 递归迭代两种方法实现

原创
作者头像
一只胡说八道的猴子
修改 于 2020-10-09 18:01:11
422 0
修改 于 2020-10-09 18:01:11
举报

题目链接

**链接**: https://leetcode-cn.com/problems/reverse-linked-list/

题目描述

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL

输出: 5->4->3->2->1->NULL

进阶:

你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

预置代码

/\*\*
 \* Definition for singly-linked list.
 \* public class ListNode {
 \*     int val;
 \*     ListNode next;
 \*     ListNode(int x) { val = x; }
class Solution {
    public ListNode reverseList(ListNode head) {
}

解题思路

方法一:递归实现

**未反转前**

**反转后**

**构造一个函数reverseList(ListNode head)进行链表反转**

    public ListNode reverseList(ListNode head) {
        /\*如果传入的节点等于null则之间返回head说明只有一个,无需反转\*/
        if (head==null){
            return  head;
        /\*如果传入节点的下一个节点为null,说明递归结束,开始进行返回节点\*/
        else if (head.next==null){
            return head;
        /\*进行递归循环,newHead保存的是最后一个节点的位置\*/
        ListNode newHead = reverseList(head.next);
        /\*传入的head节点的后继节点的next指向head,实现反转\*/
        head.next.next=head;
        /\*head的next=null\*/
        head.next=null;
        return  newHead;
    }

**精解后的代码**

public ListNode reverseList(ListNode head) {
        if (head==null||head.next==null){
            return  head;
        ListNode newHead = reverseList(head.next);
        head.next.next=head;
        head.next=null;
        return  newHead;
    }

大家如果觉得光看代码难以理解可以通过边画图边读代码的方式来进行理解,这样我感觉学起来更容易

方法二:迭代

这个理解起来应该比递归要容易的多

public ListNode reverseList(ListNode head) {
        /\*如果head==null或则head.next==null,
        即说明只有一个或者零个元素的时候,则不用经行反转
        ,直接返回head\*/
        if (head.next==null||head==null){
            return head;
        /\*新的链表的头节点\*/
        ListNode newHead=null;
        while(head!=null){
           ListNode temp=head.next;
           head.next=newHead;
           newHead=head;
           head=temp;
 
推荐文章
一直单身的台灯  ·  压缩感知与稀疏恢复matlab示例(附代码)_压缩感知稀疏基-CSDN博客
5 月前
一直单身的冰棍  ·  6合1多功能嬰兒輔食機
6 月前
博学的保温杯  ·  【极目新闻】谷爱凌喊你“好好吃饭”,专家指出瘦身和吃饭并不矛盾
7 月前
卖萌的自行车  ·  权威发布|2023软科中国大学专业排名|医学影像学|医学影像学就业 ...
8 月前
失恋的仙人掌  ·  身材矮小原因多須把握治療黃金期- 中國醫藥大學兒童醫院- www ...
8 月前
Link管理   ·   Sov5搜索   ·   小百科
小百科 - 百科知识指南