带头结点:head指针总是指向一个节点,该节点不存储有效值,它只是作为一个标识(相当于班主任带学生)
不带头结点:head指针总是指向个有效节点,该节点存储有效数值。
那么带头结点和不带头结点的链表有啥区别呢?
查询:没有大的差别,带头结点需要多找一次。
插入:非第0个位置插入区别不大,在不带头结点插入第0个位置后,需要重新改变head头的指向。
删除:非0个位置删除区别不大,不带头结点删除第0位后,需要重新更改head头指向。
头部删除(带头节点):删除头节点与普通删除相同。直接head.next=head.next.next,那么head.next将直接指向第二个元素。然后个就被删除了。
头部删除(不带头节点):不带头节点的个节点(head)就存储有效数据。删除的操作也很简单,直接将头指向链表中的第二个node节点。也就是说:head=head.next。
总结:带头结点通过一个固定头,可使链表中任意一个节点都同等的插入、删除。而不带头结点的链表在插入、删除位置需要特别处理,较后还需要改变head指向。
两者区别就是插入删除首位(尤其插入)当然我是建议你以后在使用链表时候尽量用带头结点的链表避免不必要的麻烦。