微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

王道数据结构链表算法题第三题

在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <Windows.h>

typedef struct node
{
	int data;  //数据域
	struct node* next;  //指针域
}SingleList;

//初始化
SingleList* init_SingleList()
{
	SingleList* list;
	list = (SingleList*)malloc(sizeof(SingleList));  //开辟空间
	if (list == NULL)
	{
		return NULL;
	}
	list->data = 0;
	list->next = NULL;

	return list;
}

//尾插法创建单链表
SingleList* create_SingleListByTail(SingleList* list)
{
	SingleList* head, * pCreate, * pMove;
	int num, data;
	head = (SingleList*)malloc(sizeof(SingleList));
	head = list;
	if (head == NULL)
	{
		return NULL;
	}
	else
	{
		head->next = NULL;
	}
	pMove = head;
	printf("请输入要插入的结点数:");
	scanf_s("%d", &num);
	for (int i = 0; i < num; i++)
	{
		scanf_s("%d", &data);
		pCreate = (SingleList*)malloc(sizeof(SingleList));
		if (pCreate == NULL)
		{
			return NULL;
		}
		pCreate->data = data;
		pCreate->next = NULL;
		//插入结点操作
		pMove->next = pCreate;
		pMove = pCreate;
	}
	return list;
}

//逆置链表
void reverse_SingleList(SingleList* list)
{
	SingleList* pMove, * pre = NULL, * pBehind;
	if (list == NULL)
		exit(0);
	pMove = list->next;
	while (pMove != NULL)
	{
		pBehind = pMove->next;   //保存后继结点
		pMove->next = pre;   //改当前结点的指针指向,让其指向前驱结点
		//指针下移
		pre = pMove;    
		pMove = pBehind;
	}
	list->next = pre;  //更改头结点的指向
}

//销毁单链表
void destory_SingleList(SingleList* list)
{
	SingleList* currentNode, * nextNode;
	currentNode = list->next;
	while (currentNode != NULL)
	{
		nextNode = currentNode->next;
		free(currentNode);
		currentNode = nextNode;
	}
	free(list);
	list = NULL;
}

//打印
void printf_SingleList(SingleList* list)
{
	SingleList* pMove;
	pMove = list->next;
	while (pMove != NULL)
	{
		printf("%d ", pMove->data);
		pMove = pMove->next;
	}
	printf("\n");
}

int main(void)
{
	SingleList* list, * myList;
	list = init_SingleList();  //初始化
	myList = create_SingleListByTail(list);  //尾插法创建单链表
	printf("初始链表为:\n");
	printf_SingleList(myList);  //打印
	reverse_SingleList(myList);  //逆置链表
	printf("逆置后的链表为:");
	printf_SingleList(myList);

	destory_SingleList(myList);

	system("pause");
	return EXIT_SUCCESS;
}

在这里插入图片描述

原文地址:https://www.jb51.cc/wenti/3287679.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐