链表反转

本文详细解析了链表反转的基本思想及其实现过程,并通过具体的代码示例来展示如何使用三个指针(上一个、当前、下一个)进行链表的反转操作。

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


    void reverse(node*& head)
    {
        if ( (head == 0) || (head->next == 0) ) return;// 边界检测
        node* pNext = 0;
        node* pPrev = head;// 保存链表头节点
        node* pCur = head->next;// 获取当前节点
        while (pCur != 0)
        {
            pNext = pCur->next;// 将下一个节点保存下来
            pCur->next = pPrev;// 将当前节点的下一节点置为前节点
            pPrev = pCur;// 将当前节点保存为前一节点
            pCur = pNext;// 将当前节点置为下一节点
        }
    }


首先我们分析一下这个思想:

1->2->3->4->5->6;

如果要逆转它第一步实现为:

1<-2  3->4->5->6;

看好这里会断链.(我一直相不通的就是这里)

其实在循环中我们只需要3个节点指针: 上一个, 当前, 下一个

在进入循环之前把这个三个指针准备好就行了


具体看上面代码实现


其实用循环实现是最简单的



参考:

http://www.yuanma.org/data/2006/1106/article_1785.htm

http://www.cppblog.com/tx7do/archive/2009/01/06/71280.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值