链表实现逆置
来源:互联网 发布:vue.js prop 编辑:程序博客网 时间:2024/06/06 19:08
以 1,2,3,4,5为举例
主要的算法部分:
p=L->next;//p指向L的下一个结点,即为1的位置
L->next=NULL;//把头结点和1之间断开
while(p!=NULL)//循环结束的条件
{
q=p;//Q也指向p的位置
p=p->next;//p再指向2的位置
q->next=L->next;//q的下一个指向空
L->next=q;//L的next再指向1(第一次的循环只把头指针和1先断开,再链接起来,其余以此类推)
}//这是算法的非递归实现
代码的具体实现://递归算法的实现
#include"stdio.h"
const int N=6;
typedef struct node
{
int data;
struct node *next;
}LinkedNode,*LinkList;
LinkList CreateList(int a[N])//创建一个单链表
{
LinkedNode *head=new LinkedNode();//清空头结点
head->data=a[0];//头结点放第一个数据
head->next=NULL;
for(int i=N-1;i>=1;i--)
{
LinkedNode *p=new LinkedNode();
p->data=a[i];//数据域存放数据
p->next=head->next;//指针域存放next的指针
head->next=p;
}
return head;
}
void PrintList(LinkList head)
{
if(NULL==head)
printf("The List is empty!\n");
else
{
LinkedNode *p=head;
while(p!=NULL)
{
printf("%d ",p->data);//输出一个数据
p=p->next;//指向下一个结点的位置
}
printf("\n");
}
}
void ReverseList(LinkedNode *pcur,LinkList &head)//链表逆置,头指针会发生变化
{
if(NULL==pcur||NULL==pcur->next)
head=pcur;
else
{
LinkedNode *pnext=pcur->next;//指向该数据的下一个数据的位置
ReverseList(pnext,head);
pnext->next=pcur;
pcur->next=NULL;
}
}
int main()
{
int a[N]={1,2,3,4,5,6};
LinkedNode *list=CreateList(a);//创建一个链表
PrintList(list);//输出该链表
LinkedNode *ptemp=list;
ReverseList(ptemp,list);
PrintList(list);//输出该链表
return 0;
}
- 链表实现逆置
- 链表的逆置 递归实现
- 线性表的就地逆置(数组实现+链表实现)
- 利用头插法实现单向链表的逆置
- DS之链表实现就地逆置
- 如何实现单向链表的逆置
- C语言实现链表的逆置操作
- Java栈实现:数组实现和链表实现
- C++实现队列--数组实现和链表实现
- C++实现队列--数组实现和链表实现
- 队列的实现--链表实现
- Josephus排列-红黑树实现-链表实现
- 实现循环链表(js实现)
- 链表实现队列 C++实现
- 栈实现队列,链表实现栈
- stack 底层简单实现 链表实现
- Java实现 链表实现队列
- 栈模型的实现--链表实现
- mini ui form.setData()设置不上值
- Josephus Problem (约瑟夫环数学解法)
- (转)Android Studio 与 Eclipse 快捷键对照及AS常用快捷键
- 计算器
- java集合框架(一)Collection
- 链表实现逆置
- Opencv 图像边缘拉伸
- To be g beast programmer
- 解决远程连接mysql很慢的方法(mysql_connect 打开连接慢)
- java集合框架介绍
- Linux命令学习手册-iostat命令
- 项目启动tomcat访问不到主页被占用的解决方法
- 算法之堆的实现
- pta L2-013. 红色警报