算法——反转链表(leetcode206)

反转链表顾名思义就是将链表每个节点的next指向逆转将尾节点变为头结点将头结点变为尾节点从而得到反转链表。

对于这道题有两种方法第一种是双指针法,让指针pre指向节点为null指针cur指向头结点,通过temp临时变量存储cur的下一个节点的指针让cur.next=pre接着向后移动指针pre与指针cur也就是让pre=cur,cur=temp接着重复上述步骤遍历链表进行节点反转即可结束条件即为cur==null此时pre指向为头结点返回pre即可;下面有双指针和递归两种解法双指针代码思路清晰但递归方法看起来代码更简洁同时递归也比较难懂可以先写出双指针写法然后根据双指针思路写出递归方法接着可以去除一些冗余变量赋值操作即可;

方法一(双指针)

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode temp=null;
        ListNode pre=null;
        ListNode cur=head;
        while(cur!=null){
            temp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=temp;
        }
        return pre;
    }
}

方法二(递归)

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        return reverse(head,null);
    }
    public ListNode reverse(ListNode cur,ListNode pre){
        if(cur==null) return pre;
        else {
            ListNode temp=cur.next;
            cur.next=pre;
            return reverse(temp,cur);
        }
    }
}
相关推荐
菌菌的快乐生活3 分钟前
理解支持向量机
算法·机器学习·支持向量机
大山同学8 分钟前
第三章线性判别函数(二)
线性代数·算法·机器学习
axxy200027 分钟前
leetcode之hot100---240搜索二维矩阵II(C++)
数据结构·算法
黑客Ash39 分钟前
安全算法基础(一)
算法·安全
AI莫大猫1 小时前
(6)YOLOv4算法基本原理以及和YOLOv3 的差异
算法·yolo
taoyong0011 小时前
代码随想录算法训练营第十一天-239.滑动窗口最大值
c++·算法
Uu_05kkq2 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
清梦20203 小时前
经典问题---跳跃游戏II(贪心算法)
算法·游戏·贪心算法
Dream_Snowar3 小时前
速通Python 第四节——函数
开发语言·python·算法
1nullptr3 小时前
三次翻转实现数组元素的旋转
数据结构