zoukankan      html  css  js  c++  java
  • 为什么感觉明明把两个链表链接起来了,但是实际上没有

    将*L2链表插入到*L1链表尾部(*L1, *L2均为不含头结点的链表)
     1 /*将*L2链表插入到*L1链表尾部(*L1, *L2均为不含头结点的链表)*/
     2 void attach(List *L1, List *L2)
     3 {
     4     List p;
     5 
     6     /*寻找L1链表的尾节点的next指针*/
     7     for (p = *L1; p; p = p->next);        //当指针p不为空时,p不断后移
     8 
     9     /*退出循环代表p为空,即p和尾节点的next指针同指向*/
    10     p = *L2;        //修改p,使p指向L2链表
    11 
    12 
    13 }

    上面这个函数看似把L1的尾部链接了L2的头部,但是实际上并没有。因为用于链接的指针p并不属于L1,只是一个和L1尾节点的next同指向的指针,

    是尾节点的next指针的拷贝,所以修改它的值并不会对L1有任何影响,所以当然没有将两个链表链接在一起。

    正确的做法是:将p->next作为for()循环的判断条件,最终退出循环时p->next为空,修改p->next的指向,p->next = *L2;

           这样就能将两个链表成功链接在一起了,因为虽然p指针依然只是L1链表的尾节点指针的一个拷贝,p依然不属于L1链表,

           但是p->next却是属于链表的,所以修改p->next的指向就能真正对L1链表产生影响,从而真正将L2连接到L1的尾部。

    函数代码修正如下:

     1 /*将*L2链表插入到*L1链表尾部(*L1, *L2均为不含头结点的链表)*/
     2 void attach(List *L1, List *L2)
     3 {
     4     List p;
     5 
     6     /*寻找L1链表的尾节点的next指针*/
     7     for (p = *L1; p->next; p = p->next);        //当指针p->next不为空时,p不断后移
     8 
     9     /*退出循环代表p为空,即p和尾节点的next指针同指向*/
    10     p->next = *L2;        //修改p,使p->next指向L2链表
    11 
    12 }
  • 相关阅读:
    Tabs 选项卡插件(续)
    Menu 菜单插件
    jquery Star Rating - 星形评级插件
    Tabs 选项卡插件
    jQuery Tooltips插件
    jQuery信息提示插件(jQuery Tooltip Plugin)
    Accordion 手风琴 折叠菜单插件
    Calendars 日历插件
    Microsoft Windows 2000 professional(集成SP4)简体中文专业版下载
    俄罗斯商务资讯网(门户网站)
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/10107015.html
Copyright © 2011-2022 走看看