基于链表的倒置算法

Posted cheng111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于链表的倒置算法相关的知识,希望对你有一定的参考价值。

基本原理:

   通过指针从头节点开始,将该链表的各节点依次接到临时指针的前面,然后返回临时指针所指向的地址。

算法分析:

   第一:定义三个指针变量。一个用来存放下一个节点tem;一个用当做临时指针存放提取出来的节点h;一个用来指向该链表的头节点u。

  第二:判断下一个节点(tem)是否为空,如果为不为空,则进入循环体。

  第三:保存将要提取出来节点(u)的下一个节点(tem),防止丢失。

  第四:将提取出来的节点(u)接到临时指针(h)的前面,并将临时指针(h)前移一个单位,然后将保存的节点取出。

  第五:重复步骤三和四,直到下一个节点(tem)为空

代码展示:

  注:该链表的头指针指向的是链表的第一个元素。(即该链表所有节点皆存放了数据)

void Reverse(link& L)    // 实现链表元素结点的倒置
{
    link h, u, tmp;        // 定义所要用到的指针变量(指针类型为链表)
    h = NULL; u = L;    //将h指向空,并用来存放提取出来的节点。将u指向链表的头节点。
    while (u)            //判断u是否为空。如果不为空,则进入循环体
    {
        tmp = u->next;    //将u的下一个节点给tem,防止u之后的节点丢失
        u->next = h;    //将h链表接到u节点的后面
        h = u;            //将h前移一个节点
        u = tmp;    //将u指向u保存的当前节点
    }
    L = h;        //将倒置之后的节点赋值给L
}

 

以上是关于基于链表的倒置算法的主要内容,如果未能解决你的问题,请参考以下文章

链表的基本操作(元素删除,插入,链表生成,链表倒置)

c语言,链表的反转,请写出代码,并讲解下,谢了!!!!!

Invert K Nodes In Linked List(倒置链表的K个节点)

Java算法 -- 单链表的反转单链表实现栈和队列以及双端队列K 个一组翻转链表

Java算法 -- 单链表的反转单链表实现栈和队列以及双端队列K 个一组翻转链表

Java算法 -- 单链表的反转单链表实现栈和队列以及双端队列K 个一组翻转链表