美文网首页
单链表的逆置

单链表的逆置

作者: 周末的游戏之旅 | 来源:发表于2019-08-01 09:53 被阅读0次

方法一:迭代逆置

在上一篇文章的基础上添加Reverse()方法。

//列表逆置
public void Reverse() {
    if (Head == null || Head.Next == null)  //空或者只有一个元素不用逆置
        return;
    Node<T> pre, cur, rear;
    pre = Head;
    cur = Head.Next;
    while (cur!=null)
    {
        rear = cur.Next;
        cur.Next = pre;
        pre = cur;
        cur = rear;
    }
    //以下两步,很重要
    Head.Next = null;   //这一步会使新的尾节点的链域置空
    Head = pre;   //head指针指向新的一头
}

方法二:递归逆置

//列表逆置 递归
void reverseWithRecursion(Node<T> h, Node<T> c)    //递归逆置
{
    if (c.Next == null)   //最后一个元素是递归终止条件
    {
        Head = c; //此刻的C为最后一个,将其置为头节点。
        return;
    }
    Node<T> r = c.Next;
    reverseWithRecursion(h, r);
    r.Next = c; //让本次循环的r的下一个指向c,相当于反转
    //cur->next = NULL;    //句一,这一句可以注释掉
}
public void reverse()
{
    if (Head == null || Head.Next == null)   //为空或只有一个元素就结束 
         return;
    Node<T> cur = Head;
    reverseWithRecursion(Head, cur);
    cur.Next = null;    //句二,这一句可以注释掉,不过句一和句二必须保留一句
}

相关文章

  • 算法面试:链表转置

    //单链表定义 普通的循环的方法。 //单链表逆置实现 递归调用方法

  • 插入任意数据形成有序单链表并逆置单链表

    可直接运行的完整C语言版有序单链表的生成和逆置标签:数据结构、线性表、带头结点的单链表、逆置单链表欢迎与喜欢数据结...

  • 单链表翻转

    单链表的就地逆置:就地逆置即空间复杂度为O(1)一:用数组存储单链表的值,然后重新逆序赋值,效率较低。二:利用三个...

  • 单链表逆置

    单链表逆置的思路 a:将单链表储存为数组,然后按照数组的索引逆序进行反转。b:使用3个指针遍历单链表,逐个链接点进...

  • 线性表之单链表实现

    线性表之单链表实现 实现单链表的初始化、插入、删除等基本运算 实现单链表的输入、输出运算 实现单链表的逆置、归并、...

  • 单链表的逆置

    方法一:迭代逆置 在上一篇文章的基础上添加Reverse()方法。 方法二:递归逆置

  • 王道数据结构练习

    练习2.5 //试编写算法将带头结点的单链表就地逆置#include #include #include u...

  • 单链表逆置算法详解

    思路: 首先创建一个单链表,返回一个头节点的指针( head 该头节点不为 NULL,其次进行单链表的逆置设置。具...

  • 单链表就地转置

    试写一道算法,实现单链表的就地逆置(反转),即利用原表的存储空间将线性表(a1,a2,⋯an)逆置(反转)为(an...

  • 将链表L就地逆置,即利用原表各结点的空间实现逆置

    一、题目 将链表L就地逆置,即利用原表各结点的空间实现逆置。 二、思路 在链表的第二个元素开始执行逆置,因为如果链...

网友评论

      本文标题:单链表的逆置

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