概述
头文件和宏定义
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
using namespace std;
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
- 实现部分
#include"constant.h"
typedef struct LNode
{
Status data;
LNode *next;
}LNode,*LinkList;
//遍历
Status ListTraverse_L(LinkList L)
{
LinkList p;
p = L->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("n");
return OK;
}//遍历之后指针指向表尾
//逆位序输入N个元素的值,建立带表头结点的单链线性表L
void CreatList(LinkList &L)
{
int n;
cout << "input the number n:";
cin >> n;
int i;
LinkList p;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;//先建立一个带头结点的单链表
printf("Please input the numbers:n");
for (i = n; i>0; --i)
{
p = (LinkList)malloc(sizeof(LNode));
scanf_s("%d", &p->data);
p->next = L->next; //逐渐走向表头
L->next = p;
}
printf("Now output the numbers:n");
ListTraverse_L(L);
}
//销毁单链表
Status DestroyList_L(LinkList &L)
{
LinkList p;
while (L)
{
p = L->next;
free(L);
L = p;
}
return OK;
}
void ListReverse(LinkList &L)
{
CreatList(L);
LinkList p,q,r;
p = L;
q = p->next;
r = q->next;
//反转第一个结点
q->next = NULL;
p = q;
q = r;
while (q)
{
r = q->next;
q->next = p;
p = q;
q = r;
}
L->next = p;
cout << "输出逆置结果:" << endl;
ListTraverse_L(L);
}
- 主函数
#include "stdafx.h"
#include "header.h"
int main()
{
LinkList L;
ListReverse(L);
DestroyList_L(L);
return 0;
}
- 运行结果
最后
以上就是迷你蚂蚁为你收集整理的实现单链表的就地逆置的全部内容,希望文章能够帮你解决实现单链表的就地逆置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复