单链表的逆置

题目:有一个单链表L(至少有一个结点),其头结点指针为head,编写一个函数将L逆置,即最后一个结点变成第1个结点,原来倒数第二个结点变成第二个结点…如此等等。

代码:#include

#include

#define OK 1

#define ERROR 0

typedef int Status;

typedef int ElemType;

typedef struct Lnode{

ElemType data;

struct Lnode *next;

}Lnode;

typedef Lnode *LinkList;

Status InitList(LinkList &L)//初始化一个单链表 {

Lnode *p;

p=(Lnode *)malloc(sizeof(Lnode));

if(p==NULL) return ERROR;

L=p;

return OK;

}

Status CreatList(LinkList &L)//创建一个单链表 {

int i,len;

ElemType x;

LinkList p,q;

printf("请输入表长:");

scanf("%d",&len);

printf("\n输入链表元素:\n");

i=0; q=L;

while(i

{

p=(Lnode *)malloc(sizeof(Lnode));

scanf("%d",&x);

p->data=x;

q->next=p;

q=p;

i++;

}

return OK;

}

void Nizhi(LinkList &L) //将链表中的元素顺序逆置 {

LinkList New, p, q;

p=L->next;

New=(LinkList)malloc(sizeof(LinkList));

New->next=NULL;

while(p!=NULL)

{

LinkList s=(LinkList)malloc(sizeof(LinkList)); s->data=p->data;

p=p->next;

s->next=New->next;

New->next=s;

}

L=New;

}

void PrintList(LinkList L)//显示表中元素

{

LinkList p;

p=L->next;

printf("逆置后链表中的元素为:"); while(p)

{

printf("%4d",p->data); p=p->next;

}

printf("\n");

}

void main()//主函数

{

LinkList L;

InitList(L);

CreatList(L);

Nizhi(L);

PrintList(L);

}

题目:有一个单链表L(至少有一个结点),其头结点指针为head,编写一个函数将L逆置,即最后一个结点变成第1个结点,原来倒数第二个结点变成第二个结点…如此等等。

代码:#include

#include

#define OK 1

#define ERROR 0

typedef int Status;

typedef int ElemType;

typedef struct Lnode{

ElemType data;

struct Lnode *next;

}Lnode;

typedef Lnode *LinkList;

Status InitList(LinkList &L)//初始化一个单链表 {

Lnode *p;

p=(Lnode *)malloc(sizeof(Lnode));

if(p==NULL) return ERROR;

L=p;

return OK;

}

Status CreatList(LinkList &L)//创建一个单链表 {

int i,len;

ElemType x;

LinkList p,q;

printf("请输入表长:");

scanf("%d",&len);

printf("\n输入链表元素:\n");

i=0; q=L;

while(i

{

p=(Lnode *)malloc(sizeof(Lnode));

scanf("%d",&x);

p->data=x;

q->next=p;

q=p;

i++;

}

return OK;

}

void Nizhi(LinkList &L) //将链表中的元素顺序逆置 {

LinkList New, p, q;

p=L->next;

New=(LinkList)malloc(sizeof(LinkList));

New->next=NULL;

while(p!=NULL)

{

LinkList s=(LinkList)malloc(sizeof(LinkList)); s->data=p->data;

p=p->next;

s->next=New->next;

New->next=s;

}

L=New;

}

void PrintList(LinkList L)//显示表中元素

{

LinkList p;

p=L->next;

printf("逆置后链表中的元素为:"); while(p)

{

printf("%4d",p->data); p=p->next;

}

printf("\n");

}

void main()//主函数

{

LinkList L;

InitList(L);

CreatList(L);

Nizhi(L);

PrintList(L);

}


相关文章

  • 单链表的创建及操作
  • 山东师范大学 实 验 报 告 课 程: 数据结构 班 级: 2013级1班 实验序号: 116王海峰 姓 名: 王海峰 学 号: [1**********]6 实验日期:2014.3.25 题目: 单链表的创建及操作 一.实验目的和要求 ( ...查看


  • 数据结构第2章-答案
  • 一.填空题 01.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用顺序存储结构. 02.线性表L=(a1,a2, -,an )用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均 ...查看


  • 单链表实验内容
  • 专业 学号 姓名 吴兴平 教师评定_________________ 实验题目 单链表操作 一. 实验内容 1)建立带表头结点的单链表: (2)输出单链表中所有结点的数据域值: (3)输入x,y 在第一个数据域值为x 的结点之后插入结点y ...查看


  • 线性表的例子
  • #ifndef LINKLIST_H #define LINKLIST_H /******************* 线性表的单链表存储结构 ********************/ template class LinkList; te ...查看


  • 数据结构经典算法试题
  • 1. 假设有两个按元素值递增次序排列的线性表,均以单链表形式.请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表.[北京大学 1998 三.1 (5分)] LinkedList ...查看


  • 实现单链表的就地逆置算法
  • 题目:有一个线性表(a1,a2,a3,....,an),采用带头节点的单链表L存储,设计一个算法将其就地逆置.所谓"就地"指辅助空间应该为O(1). 方法一:采用头插法 先将L的头节点head的Next域置为NULL变成 ...查看


  • 名词解释总结 1
  • 名词解释总结 第五章 DNA 复制 DNA复制(DNA replication):亲代双链DNA分子在DNA聚合酶的作用下,分别以各单链 DNA分子为模板,聚合与自身碱基可以互补配对的游离的dNTP, 合成出两条与亲代DNA分子完全相同的子 ...查看


  • 数据结构线性表与链表实验论文
  • 数据结构 上机实验1 班级:计科1303 姓名:辛颖 学号:[1**********]24 一.实验题目:线性表 二.实验目的: 1.熟悉将算法转换为程序代码的过程: 2.了解顺序表的逻辑结构特性,熟悉掌握顺序表存储结构的C 语言描述方法: ...查看


  • 单链表的定义及基本操作
  • 附件2: 北京理工大学珠海学院实验报告 ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY 班级 XXX 3班 学号 0123456 姓名 XXX 指导教师 XIAO FENG 成绩 实验题目 ...查看


热门内容