Leecode206:反转链表

63 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情 首先来介绍下什么是链表? 链表是什么?
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。如图所示

Snipaste_2022-11-26_23-08-33.jpg 特性:不按顺序存储,链表在插入的时候可以达到O(1)的复杂度,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。 所以链表的特性为:插入删除块,查找慢
下面介绍Leecode206题: 反转链表
题目叙述为: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
要想链表反转,试想一下:如果只有两个结点,只需要更换两个节点的指向,然后再结点后移即可(将当前节点的 next 指针改为指向前一个节点)如图所示

Snipaste_2022-11-26_23-13-05.jpg
本题采用迭代法:

public class Solotion206 {
    /**
     * 迭代法
     * @param head
     * @return
     */

    public ListNode reverseList(ListNode head) {
        ListNode prev=null;
        ListNode current=head;
        while (current!=null){
            ListNode next=current.next;
            //1.更换指针 只需要将 current.next指向prev(前一个结点)
            current.next=prev;
            //2.指针往后移动
            prev=current;
            current=next;
        }
return prev;
    }
}