LeetCode206---反转链表(Java实现,有图解)

简介: 该链表是单链表,反转后的链表的每个结点都指向前一个结点,即第一个指向空,最后一个指向倒数第二个。

题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。  OJ链接


示例:

image.png



输入:[ 1 , 2 , 3 , 4 ]


输出:[ 4 , 3 , 2 , 1 ]


分析:该链表是单链表,反转后的链表的每个结点都指向前一个结点,即第一个指向空,最后一个指向倒数第二个。


整个过程大致可以概括为:断开当前结点指向 ,让该结点指向前一个结点,以此类推到最后一个节点。


此题将采用三指针法,画图进行说明:

image.png



代码实现:

public class ListNode {
    ListNode next;
    int val;
    //构造方法
    public ListNode(int val){
        this.val = val;
    }
    public ListNode(){
    }
    public ListNode(int val,ListNode next){
        this.val = val;
        this.next = next;
    }
}
class Solution{
    public ListNode reverseList(ListNode head){
        ListNode cur = head;
        ListNode pre = null;
        ListNode next = null;
        while(cur != null){
            next = cur.next;    //next指向cur的下一个结点
            cur.next = pre;     //cur指向前一个结点
            pre = cur;          //pre指向cur
            cur = next;         //cur指向next
        }
        return pre;             //返回反转后链表的首结点
    }
}


说明:结点的构造题目一般都是给出的,我们只需实现主体,也就是Solution中的内容即可。


相关文章
|
1月前
|
算法
LeetCode刷题---21.合并两个有序链表(双指针)
LeetCode刷题---21.合并两个有序链表(双指针)
|
1月前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
1月前
|
存储
LeetCode刷题---817. 链表组件(哈希表)
LeetCode刷题---817. 链表组件(哈希表)
|
14天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
1月前
|
算法 测试技术
LeetCode刷题--- 430. 扁平化多级双向链表(深度优先搜索)
LeetCode刷题--- 430. 扁平化多级双向链表(深度优先搜索)
|
1月前
|
算法 安全 数据处理
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
|
10天前
【力扣】21. 合并两个有序链表
【力扣】21. 合并两个有序链表
|
1月前
|
存储 Java
Java链表
Java链表
11 0
|
1月前
|
存储 JavaScript
leetcode82. 删除排序链表中的重复元素 II
leetcode82. 删除排序链表中的重复元素 II
22 0