栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

反转链表(双指针)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

反转链表(双指针)

反转链表:

方法一:迭代(双指针)

考虑遍历链表,并在访问各节点时修改 next 引用指向。多创建一个指针prev和指针curr进行交换指向,达到改变各节点的指向目的。

#include
#include

struct node {         //用结构体变量和指向结构体变量的指针构成链表
    int num;
    struct node* next;   //*next表示指向node这个结构体的指针变量
};

class Solution {
public:
    node* reverseList(node* head) {
        node* cur = head, * pre = NULL;
        while (cur != NULL) {
            node* tmp = cur->next; // 暂存后继节点 cur.next
            cur->next = pre;           // 修改 next 引用指向
            pre = cur;                 // pre 暂存 cur
            cur = tmp;                 // cur 访问下一节点
        }
        node* temp = pre;
        while (temp!= NULL) {      //遍历一下看结果
            std::cout << temp->num << std::endl;
            temp = temp->next;
        }
        return pre; //返回的是反过来的链表的头地址
    }
};

int main() {
    node a,b, * head, * p;
    a.num = 1;
    b.num = 2;
    head = &a;
    a.next = &b;
    b.next = NULL;
    Solution text;
    text.reverseList(head);
}

方法二:递归

考虑使用递归法遍历链表,当越过尾节点后终止递归,在回溯时修改各节点的 next 引用指向。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号