基于链表的倒置算法
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 }
以上是关于基于链表的倒置算法的主要内容,如果未能解决你的问题,请参考以下文章
Invert K Nodes In Linked List(倒置链表的K个节点)
Java算法 -- 单链表的反转单链表实现栈和队列以及双端队列K 个一组翻转链表