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中的内容即可。


相关文章
|
4月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
51 1
|
4月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
65 0
Leetcode第21题(合并两个有序链表)
|
5月前
|
Java
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
4月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
36 3
|
4月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
42 0
LeetCode第二十四题(两两交换链表中的节点)
|
4月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
54 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
4月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
121 0
|
4月前
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
34 0
|
4月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
25 0
|
4月前
【LeetCode 08】206 反转链表
【LeetCode 08】206 反转链表
22 0