赞
踩
链表分为
1、单向或者双向
2、带头或者不带头(哨兵位的头节点,不存储有效数据)
单讲一下
对于单链表来说,哨兵位就是一个带头链表,有个专门的链表头结点,并不存储数据,链表的所有操作都不涉及头结点的操作,因此在插入删除节点的时候不需要判断链表是否为NULL,头插直接就往哨兵位后边插,尾插就遍历到末尾插
没有哨兵位其实也就是不带头,插入删除数据的时候需要判断链表是否为NULL,
加入要给链表插入一个数据
带头的:
头插:newnode->next = head->next; head->next = newnode;
尾插:cur = head; while(cur->next) cur=cur->next; cur->next = newnode;
不带头的:需要传入二级指针,也就是头结点指针变量地址
头插:newnode->next = *head; *head = newnode;
尾插:if(head==null) *head=newnode;else while(head->next) *head=*head->next; head->next = newnode
3、循环或者非循环
一共有八种链表结构:
其中最有有价值的是:
1、无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,比如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。
2、带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。
实现比之前学的无头单向非循环更简单!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。