链表是一种重要的数据结构,可以动态进行数据的存储分配。对链表的操作包括链表的建立,链表节点的插入和删除等。
(1)插入节点。
例如,若要在节点a、b之间插入c,则需要将指针指向a,然后将c->next=a->next;a->next=c;,便得到a->c->b;
(2)删除节点。
例如,若在a,c,b三个连续节点中删除c,则将指针指向a后,再将a->next=c->next。链表操作的原则:保证操作顺利完成而且不致丢失。
【程序实例】
编写函数insert_snode,它的功能是:在值为x的结点前插入值为y的结点,若值为x的结点不存在,则插在表尾。
函数insert_snode中综合运用了“查找”和“前插”的算法。(www.xing528.com)
由于本例中的单向链表采用了带有头结点的结构,不需要单独处理新结点插在表头的情况,从而简化了操作。
在进行插入操作的过程中,可能遇到三种情况:
①链表非空,值为x的结点存在,新结点应插在该结点之前。
②链表非空,但值为x的结点不存在,按要求,新结点应插在表尾。
③链表为空表,这种情况相当于值为x的结点不存在,新结点应插在表尾,即插在头结点之后,作为表的第一个结点。
函数insert_snode将对这三种情况进行处理。
在函数中,对于空表,在执行p=head->next;后,p的值就为NULL,因此不会进入循环;当表非空时,进入循环,在while循环中,当出现p==‘\0’时,将退出循环,这时p中的值已经是NULL,这意味着查找结束,链表中不存在值为x的结点。对于这两种情况,语句s->next=p;q->next=s;将使新结点插在表尾。当链表中存在值为x的结点时,p中的值一定不为‘\0’,语句s->next=p;q->next=s;使新结点插在x结点之前。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。