链表增加元素,首部、中间和尾部分别会有什么问题,该怎样处理?
链表表头插入
问题:执行newNode=head后,容易忘记head重新指向表头
处理:使用head=newNode让head重新指向表头
链表中间插入
问题:我们遍历找要插入的位置时,需要在目标的前一个位置停下来,也就是前驱结点cur。插入操作前用cur.next的值判断目标的前一个位置而不是cur的值判断,而插入的时候,容易因为插入过程中插入结点的前后指向顺序颠倒而发生错误。
处理:先处理插入结点指向后驱结点new.next=cur.next,然后再处理前驱结点指向插入结点cur.next=new。而为什么不能颠倒呢?因为每个结点都只有一个next,先执行cur.next=new的话,链表中原先的cur.next与cur的连接就会断开,new就指向不到链表原先的cur.next
单链表结尾插入结点
问题:结尾插入结点比较简单,没什么常见的问题。
处理:只需要将尾结点指向新结点就行了。