一.
1.顺序表是线性表的一种.
线性表的物理结构不一定是线性的
线性表的逻辑结构一定是线性的
但
顺序表的物理结构和逻辑结构都一定是线性的
二.
1.链表能解决顺序表
(1).扩容导致空间浪费
(2).插入数据在头部或在中部时,要整体进行挪动
(3).重新扩容导致的时间浪费
的问题
2.链表的逻辑结构连续而物理结构不连续
4.函数传输指针也可能是传值调用
四:
1.单链表中的头结点指的是第一个有效节点
2."带头"链表里的"头"指的是无效的节点
3.不带头链表和带头链表的区别是后者具有头结点(类似于火车头,内部没有任何数据)
5.用的多的还是单链表和双链表
6.单链表指的是不带头单向不循环链表
7.双向链表指的是带头双向循环链表
8.头节点一般默认为链表的第一个节点
10.快慢指针法:
建立两个指针,一个slow指针,一个fast指针
slow指针一次走一步,fast一次走两步
例:
题目:
有单链表的头结点head,请找出并返回链表的中间结点.
如有两个中间结点,则返回第二个中间结点.
typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {
ListNode* slow, *fast;
slow = fast = head;
while(fast && fast->next)
{
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
11.
注:ListNode* slow, *fast;
这样造出来的两个才是指针
ListNode* slow, fast;
这样造出来的只有前边的是指针