单链表反转的算法代码实现

作者: kevinsong0810 | 来源:发表于2018-11-25 14:30 被阅读1次

这是一道简单的算法题。

题目如下:

单链表,反转前:
node_1 -> node_2 -> node_3 -> node_4 -> node_5,其中指针pHead指向头节点node_1
反转后:
node_5 -> node_4 -> node_3 -> node_2 -> node_1,其中指针pHead指向头节点node_5

关键点:

共计使用3个指针完成反转,除头节点指针pHead外,创建2个指针p1,p2,
p1作用:指向未参与反转的下一个节点,确保后续链表不会丢失
p2作用:指向当前正参与反转的节点,将其next指针指向前一个节点

代码实现如下:
// 定义单链表节点
Struct {
    int key; // 节点存储的值
    Node *next; // 指向下一个节点
} Node;

void reverse(Node *pHead) {
    if (null == pHead) {
        return;
    }

    Node *p1 = pHead->next;
    pHead->next = null; // 此时的头节点将作为单链表最后一个节点,所以指向为null
    Node *p2 = p1;

    while (null != p1->next) {
        p1 = p1->next; // p1指向下一个节点,不参与此轮循环内的反转
        p2->next = pHead; // p2反转当前节点,指向上一节点
        pHead = p2; // pHead指向新的单链表头节点
        p2 = p1; // p2指向p1,此节点将参与下轮循环的反转
    }
}



作者:kevin song,2018.11.25于南京建邺区

相关文章

  • 单链表反转

    单链表反转 单链表初始化 输出 反转 释放 实现代码 尚未实现 元素插入 元素删除

  • 单链表反转问题

    基本问题 如何将单链表反转? 单链表结构定义 算法实现 进阶问题 如何将单链表在指定区间内进行反转? 问题分析 这...

  • 单链表反转的算法代码实现

    这是一道简单的算法题。 题目如下: 单链表,反转前:node_1 -> node_2 -> node_3 -> n...

  • LeetCode链表专题

    (一)LeetCode206.反转链表 题目描述: 反转一个单链表。 代码实现 (二)LeetCode160. 相...

  • 链表简单算法相关练习

    单链表反转: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 迭代方式实现: 复杂度分析: 时...

  • 单链表 & 双链表& 单向循环链表的实现

    单链表 具体实现: 双链表 代码实现: 单向循环链表的实现 代码实现:

  • 单链表

    单链表一些相关的算法集锦,单链表的算法可以提高逻辑能力。 反转链表 最基本的链表的题目,很简单的迭代操作,需要注意...

  • Algorithm小白入门 -- 单链表

    单链表递归反转链表k个一组反转链表回文链表 1. 递归反转链表 单链表节点的结构如下: 1.1 递归反转整个单链表...

  • 【Leetcode】206—Reverse Linked Lis

    一、题目描述 反转一个单链表。示例: 二、代码实现 方法一、迭代法 方法二、递归法 先反转后面的链表,从最后面的两...

  • 反转单链表Java实现

    问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 解题思路 为了实现反转单链表,...

网友评论

    本文标题:单链表反转的算法代码实现

    本文链接:https://www.haomeiwen.com/subject/rujpqqtx.html