开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
首先来介绍下什么是链表?
链表是什么?
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。如图所示
特性:不按顺序存储,链表在插入的时候可以达到O(1)的复杂度,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
所以链表的特性为:插入删除块,查找慢
下面介绍Leecode206题: 反转链表
题目叙述为:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
要想链表反转,试想一下:如果只有两个结点,只需要更换两个节点的指向,然后再结点后移即可(将当前节点的 next 指针改为指向前一个节点)如图所示
本题采用迭代法:
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;
}
}