一.单向链表
1.插入
a[i]________________________a[i+1]
___________________________^
|___________________________|
|----------> (a[j])-----------| (方括号[]内的是下标,a[j]表示插入进去的元素)
插入分两步
第一步把插入进的 a[j]的next赋值成a[i+1];
第二步把a[i]的next赋值成a[j]
a[j]->next=a[i]->next;
a[i]->next=a[j];
2.删除 (逻辑意义上的,实际只是按链表访问不到这个元素了)
a[i-1]______a[i]_______a[i+1]
|________________________^
|________________________|
删除只需要一步
把a[i-1]的next指向a[i-1]的next的next就行了(为了防止a[i+1]被删掉了)
a[i-1]->next=a[i-1]->next->next;
二.双向链表
1.双向链表与单向链表的区别
单向链表一项有一个数据和一个指针,叫next,代表它的后一项。
双向链表一项有一个数据和两个指针,一个指针叫pre,代表它前一项,另一个指针叫next,代表它的后一项。
双向链表因为多一个指针,就多空间,少访问时间,但较复杂,慎用,一般用单项就够了。
2.插入
比单向链表的插入多了两步,一步将a[i+1]的pre指针指向a[j],一步将a[j]的pre指针指向a[i] (图太难画了)
前两步(单、双向都有的步骤)的顺序固定,后两步顺序任意
a[j]->next=a[i]->next;
a[i]->next=a[j];
a[i+1]->pre=a[j];
a[j]->pre=a[i];
3.删除
比单向链表的插入多了一步,将a[i+1]的pre指针指向a[i-1]
a[i-1]->next=a[i-1]->next->next;
a[i-1]->next->pre=a[i-1];