在一个单链表中,若删除p所指结点的后续结点,则执行的语句系列是什么?
让p的下一个结点指向下一个的结点的下一个结点,然后free掉(p->next)。在一个单链表中,若要删除p结点的后续结点,只要将p的指针域指向p的后继的后继即可,即p↑.next=p↑.next↑.next。
单链表第i个数据删除结点的算法思路:
1、声明一结点p指向链表第一个结点,初始化j从1开始;
2、当j<i时,就遍历链表,让p的指针向后移动,不断指向下一结点,j累加1;
3、若到链表末尾p为空,则说明第i个元素不存在;
4、否则查找成功,将欲删除的结点p->next赋值给q;
5、单链表的删除标准语句p->next=q->next;
6、将q结点中的数据赋值给e,作为返回;
7、释放q结点;
8、返回成功。
扩展资料
单链表的建立有头插法、尾插法两种方法。
1、头插法
单链表是用户不断申请存储单元和改变链接关系而得到的一种特殊数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法最先得到的是尾结点。
由于链表的长度是随机的,故用一个while循环来控制链表中结点个数。假设每个结点的值都大于O,则循环条件为输入的值大于o。
申请存储空间可使用malloc()函数实现,需设立一申请单元指针,但malloc()函数得到的指针并不是指向结构体的指针,需使用强制类型转换,将其转换成结构体型指针。刚开始时,链表还没建立,是一空链表,head指针为NULL。
链表建立的过程是申请空间、得到数据、建立链接的循环处理过程。
2、尾插法
若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头指针固定不动,故必须设立一个搜索指针,向链表右边延伸,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法最先得到的是头结点。
//保存p所指节点的后续节点
Node *tmp = p->next;
//当tmp为不为空时才进行删除操作,否则不需要进行
if(tmp != NULL)
{
//将p与它后续节点的后续节点连接,这样才不至于断链
p->next = tmp->next;
//之后就可以删除tmp并置空了
delete tmp;
tmp = NULL;
}
p->next指向p指针的后继结点,p->next->next指向后继结点的后继结点