编程集训【第二天】-链表

一、基础知识

单链表:是指通过一组任意的存储单元来存储线性表中的数据元素。为了建立起数据元素间的线性关系,对每个链表结点,除了存放元素自身的信息之外,还需要存放一个指向其后继的指针。
【注】为了操作的方便,在单链表第一个结点之前附加一个结点,称为头结点。头结点的数据域可以不设任何信息,也可以记录表长等相关信息。

二、142-环形链表 II

题目描述:
编程集训【第二天】-链表

解法一:快慢指针法

  1. 使用两个指针,一个快指针,步长为2;另一个慢指针步长为1.若此链表存在环,则两个指针必然相遇。打个简单的比方:操场上两个人跑步,一个人的速度是另一个人速度的两倍,他们必然相遇!
  2. 存在环后,将其中一个指针置为头结点,则他们再次相遇时的结点必然是环的起点(具体推导建议百度)

代码:
编程集训【第二天】-链表

运行结果:
编程集训【第二天】-链表

解法二:哈希表
使用哈希的方法,将已访问的结点放入结合中,然后结点一直后移,当某个节点已经存在集合中时,说明链表存在环并且该节点就是环的起点

代码:
编程集训【第二天】-链表

运行结果:
编程集训【第二天】-链表

三、206-反转链表

题目描述:
编程集训【第二天】-链表

代码:
编程集训【第二天】-链表
运行结果:
编程集训【第二天】-链表