Logo xuanxuan0604的博客

博客

链表(不循环!!!)

2024-07-16 21:31:45 By xuanxuan0604

一.单向链表

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]nextnext就行了(为了防止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];

评论

Raphael
???

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。