算法通关村第一关———链表青铜挑战笔记
1、链表的插入
链表插入是将一个新的结点插入到链表当中。
插入时要考虑三种情况:
- 插入到开头(首部)
- 插入到链表中间
- 插入到最后面(尾部)
一、首部插入
首部插入算是最简单的一种,其中易错点是,插入新的结点之后,会忘记把新结点变成首结点。
其中,重要的代码部分就是
newNode.next = head;//新结点的后继是要插入的链表
head = newNode;在这里是把新的结点当做首结点,这样首部的结点就插入完成
当要插入的链表是null,(head == null),可以是直接返回newNode,或者抛出不能插入的异常。
二、插入到链表中部
在中间插入时,首先要注意的是我们要找的位置应该是插入点本身,之前的结点,这样才可以保证在找到插入点时不会丢失前驱结点的位置(保证后续的插入操作)
重要的代码部分(重点是如何切断插入点前驱和后继的联系,并将结点再次连接)
//首先,我们应该是先将新插入的结点后继连接到原本插入点后面的结点上(**重点:是为了保证不会丢失后继节点,如果先连接前驱,会导致后继的直接断开,从而丢失真正的后继结点**)
newNode.next = node.next;
node.next = newNode;//这两部顺序坚决不能颠倒
三、插入到尾部
也是比较简单的插入,我们可以直接将尾部节点指向新的结点就可以了。