带表头结点的单链表的基本操作

已知L 是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点

1.删除P结点的直接后继结点

思路:先用工作结点保存P结点的直接后继,然后将P结点的指针域指向P结点的直接后继节点的直接后继节点,然后再删除该工作结点。

Q = P->next;

P->next = P->next->next;

free(Q);

2.删除P节点的直接前驱结点(有毛病)

思路:用工作结点保存P结点,然后将表头结点赋给P结点,进行遍历,找到初始时P结点的直接前驱结点的直接前驱结点,即为此时的P结点,再将该P结点的指针域指向其直接后继结点的直接后继结点,即指向初始时的P结点

Q = P;

P = L;

while (P->next->next != Q) {

    P = P->next;

}

P->next = P->next->next;

free(Q);

 

3.删除P结点(有毛病)

 

Q = P;

P = L;

while (P->next != Q) {

    P = P->next;

}

P->next = P->next->next;

free(Q);

 

4.删除首元结点

P = L;

Q = P->next;

P->next = P->next->next;

free(Q);

 

5.删除尾元结点

 

while(P->next->next != NULL) {//找到尾元结点的直接前驱结点

    P = P->next;

}

//P结点即为尾元结点的直接前驱,Q结点即为尾元结点

Q  = P->next;

P->next = P->next->next;//尾元结点的指针域实际是指向空

free(Q);

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值