C++翻转链表设计图解循环过程

C++翻转链表图解

1.代码

双指针法(cur与pre):利用三个节点指针完成翻转,cur初始化为头指针,pre为辅助指针。tmp保存下次cur所指的位置。while循环里的过程在图解中体现。

     LinkedNode* reverseList(LinkedNode* head)
    {
        LinkedNode* cur =head;
        LinkedNode* pre =NULL;
        LinkedNode* tmp =NULL;
        while(cur){
            tmp=cur->next;
            cur->next=pre;//指向翻转
            pre=cur;//更新pre
            cur=tmp;//cur前进一位
        }
        dummyNode->next=pre;//虚拟头节点和反转后的链表连接,方便打印
        return pre;
    }

2.图解

在这里插入图片描述
图中单箭头表示“指向”的含义。根据循环可以得出结论,翻转链表的过程就是pre和cur指针每次向前递进一位(可以理解为手牵手一起走),cur->next负责改变指向,最后一次循环后,pre指向原本的最后一位,cur指向空指针退出循环。
dummyNode->next=pre;语句是在所属类中为反转的链表重新配置虚拟头节点,否则虚拟头节点还是指向原本的头节点。需要注意的是该语句放在所属类的公有成员函数里,可以调用私有数据dummyNode。在类外编写翻转函数时不能使用。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值