链表两节点互换的指针问题

在实现链表排序算法时,尝试通过直接互换节点指针来完成节点位置互换,但发现这种方法行不通。分析指出,由于指针的复制特性,实际互换的是函数内部指针副本,而非原始指针,导致操作无效。通过深入理解指针工作原理,最终得出正确实现链表节点互换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



    今天在写一个链表排序算法时,需要频繁的对链表节点进行位置互换,于是就想找一个操作简单运算效率又高的算法。不知哪根神经不对劲,突然就想试试能不能通过直接互换两个节点的指针,很快写出如下交换函数:

void DoExchange(Node *A, Node *B)
{
	Node* temp = A;
	A = B;
	B = temp;
}

       一运行,果然是不行的!接着开始思考为什么这样不行,凭着对指针的直觉,很快想到一个自圆其说的解释,如图:

    这里以单链表为例,简化问题。AB为要互换的两个节点,方框表示节点结构体的存储地址,pq为指向它们的指针。由于指针互换后,只是改变了pq指向的地址,而节点间的连接关系并没有改变,这是因为在链表遍历过程中,存储下一个节点地址的指针包含在上一个节点地址中,即存储A地址的指针在地址PreA

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值