单链表的逆置问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
linknode* head;/*定义变量head,以表示处理的单链表头指针*/
elemtype x;/*定义数据类型*/
head = create();/*建立单链表head*/
head = invert(head);/*逆序打印单链表*/
disp(head);/*显示逆置后的单链表*/
}
head=p;
else
q->next=p;
q=p;
}
return head;
}
linktype* invert(linknode* head)
{
if (head == NULL) {
printf("link empty\n");
return NULL;
}
linknode *p,*s,*t;
p = head;
elemtype data; /*定义元素类型为所有可能数据类型*/
struct node *next; /*开设一个名为next的指针变量,指向的结点类型是linknode的*/
}linknode; /*定义结点类型*/
typedef linknode linktype;
linktype* create(); /*通过读数据文件input.txt中的数据建立一个不带头结点的单链表,通过函数的值返回头指针*/
s = p->next;
while(s != NULL) //主要置换过程
{
t=s->next;
s->next=p;
p=s;
s=t;
}
head->next = NULL;//收尾
head = p;//赋头
return head;
}
void disp(linknode* head)
{
if (head == NULL) {
{
n=atoi(buf);/*将字符串转换为整数型*/
struct node *p,*q;
p=(struct node*)malloc(sizeof(struct node));/*申请建立一个struct node类型结点*/
p->data=n;
p->next=NULL;
if(head==NULL)
void disp(linknode* head); /*遍历显示以head为头指针的单链表*/
linktype* invert(linknode *head); /*逆序打印单链表*/
linktype* create()/*创建单链表*/
{
FILE* fp = fopen("C://input.txt" , "r");
一、单链表逆置问题
1)实验问题:用函数create()、disp(nodetype *h)、invert(nodetype *h)实现单链表的逆置问题。
2)基本思想:在遍历原表的时候,从原表的第一个结点开始,将各个结点的指针逆转,最后修改头结点的指针域,使其指向原表的最后一个结点,即新表的第一个结点。
3)算法流程图:
4)测试数据及结果运行图:
5)源代码:
#include<stdio.h>
#include<malloc.h>
#include "linklist.h"
typedef int elemtype;; /*定义元素类型*/
typedef struct node /*定义链表的结点类型*/
{
if(fp == NULL)
{
printf("open file failed\n");
return NULL;
}
char buf[100];/*定义一个数=组作为缓冲区*/
int n=0;
linktype* head = NULL;
while((fgets(buf,100,fp)) != NULL)
printf("link empty\n");
return;
}
linknode *p;
p=head;
printf("\n逆置后链表中元素为:\n");
while(p!=NULL)
{
printf("%d ",p->data);
//fwrite();
p=p->next;
}பைடு நூலகம்
printf("\n");
}
void main()
linknode* head;/*定义变量head,以表示处理的单链表头指针*/
elemtype x;/*定义数据类型*/
head = create();/*建立单链表head*/
head = invert(head);/*逆序打印单链表*/
disp(head);/*显示逆置后的单链表*/
}
head=p;
else
q->next=p;
q=p;
}
return head;
}
linktype* invert(linknode* head)
{
if (head == NULL) {
printf("link empty\n");
return NULL;
}
linknode *p,*s,*t;
p = head;
elemtype data; /*定义元素类型为所有可能数据类型*/
struct node *next; /*开设一个名为next的指针变量,指向的结点类型是linknode的*/
}linknode; /*定义结点类型*/
typedef linknode linktype;
linktype* create(); /*通过读数据文件input.txt中的数据建立一个不带头结点的单链表,通过函数的值返回头指针*/
s = p->next;
while(s != NULL) //主要置换过程
{
t=s->next;
s->next=p;
p=s;
s=t;
}
head->next = NULL;//收尾
head = p;//赋头
return head;
}
void disp(linknode* head)
{
if (head == NULL) {
{
n=atoi(buf);/*将字符串转换为整数型*/
struct node *p,*q;
p=(struct node*)malloc(sizeof(struct node));/*申请建立一个struct node类型结点*/
p->data=n;
p->next=NULL;
if(head==NULL)
void disp(linknode* head); /*遍历显示以head为头指针的单链表*/
linktype* invert(linknode *head); /*逆序打印单链表*/
linktype* create()/*创建单链表*/
{
FILE* fp = fopen("C://input.txt" , "r");
一、单链表逆置问题
1)实验问题:用函数create()、disp(nodetype *h)、invert(nodetype *h)实现单链表的逆置问题。
2)基本思想:在遍历原表的时候,从原表的第一个结点开始,将各个结点的指针逆转,最后修改头结点的指针域,使其指向原表的最后一个结点,即新表的第一个结点。
3)算法流程图:
4)测试数据及结果运行图:
5)源代码:
#include<stdio.h>
#include<malloc.h>
#include "linklist.h"
typedef int elemtype;; /*定义元素类型*/
typedef struct node /*定义链表的结点类型*/
{
if(fp == NULL)
{
printf("open file failed\n");
return NULL;
}
char buf[100];/*定义一个数=组作为缓冲区*/
int n=0;
linktype* head = NULL;
while((fgets(buf,100,fp)) != NULL)
printf("link empty\n");
return;
}
linknode *p;
p=head;
printf("\n逆置后链表中元素为:\n");
while(p!=NULL)
{
printf("%d ",p->data);
//fwrite();
p=p->next;
}பைடு நூலகம்
printf("\n");
}
void main()