单链表倒序

2024-03-19 07:38
文章标签 单链 倒序

本文主要是介绍单链表倒序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include<stdio.h>

#include<stdlib.h>

#include <malloc.h>

/*链表的定义,从头添加数据,从尾添加数据,打印链表,将链表倒序*/

struct student//结构体

{

int id;

char nName[20];

float sc;

 

};

typedef student DATA;//结构体的别名

struct SNode//单链表

{

DATA data;

SNode *pNext;

};

SNode *g_pHead=NULL;//头指针

int Add_List(DATA data)//从头添加数据

{

SNode *p = (SNode *)malloc(sizeof(SNode));//申请空间

p->data = data;

p->pNext = g_pHead;

g_pHead = p;

return 0;

}

int Add_List_p(DATA data)//从尾添加数据

{

SNode *p1 = (SNode *)malloc(sizeof(SNode));

p1->data = data;

p1->pNext = NULL;//尾部NULL

if (g_pHead == NULL)

{

g_pHead = p1;

}

SNode *p = g_pHead;

while (p ->pNext!= NULL)//遍历到尾部

{

p = p->pNext;

}

p->pNext = p1;

return 0;

}

int Prt_List()//打印链表

{

SNode *p = g_pHead;//保护头指针

while (p!=NULL)

{

printf("%d\t", p->data.id);

printf("%s\t", p->data.nName);

printf("%0.1f\t\n", p->data.sc);

p = p->pNext;

}

return 0;

}

SNode * re_List(SNode *L)//倒序

{

SNode *current, *pnext, *prev;

if (L == NULL || L->pNext == NULL)

return L;

current = L->pNext;  // p1指向链表头节点的下一个节点

pnext = current->pNext;

current->pNext = NULL;

while (pnext)

{

prev = pnext->pNext;

pnext->pNext = current;

current = pnext;

pnext = prev;

}

//printf("current = %d,next = %d \n",current->data,current->next->data);

L->pNext = current;  // 将链表头节点指向p1 //

return L;

}

 

/*SNode *p1 = g_pHead->pNext;

SNode *p2 = p1->pNext;

SNode *p3 = p2->pNext;

p1->pNext = NULL;

while (p1->pNext!=NULL)

{

p2->pNext=p1;

p1 = p2;

p2 = p3;

}

g_pHead->pNext = p1;

return g_pHead;

*/

int main()

{

Add_List({ 3,"sb", 30 });

Add_List({ 2 ,"eb", 360 });

Add_List({ 1 ,"sbe", 50 });

Add_List_p({ 4 ,"sb", 30 });

Add_List_p({ 5 ,"eb", 360 });

Add_List_p({ 6 ,"sbe", 50 });

Prt_List();

g_pHead = re_List(g_pHead);

Prt_List();

return 0;

}

这篇关于单链表倒序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/825252

相关文章

Go语言构建单链表

package mainimport "fmt"type ListNode struct {Val intNext *ListNode}func main() {list := []int{2,4,3}head := &ListNode{Val:list[0]}tail := head //需要头尾两个指针for i:=1;i<len(list);i++ {//方法一 数组直接构建链表tai

[数据结构]线性表之单链表的类模板实现

类的具体实现如下: /#include"LinearList.h"#include <iostream>#include <cstdlib>using namespace std;template<class T>struct LinkNode //链表节点类{T data;LinkNode<T>* link;LinkNode(LinkNode<T>* ptr=NULL):

逆序和顺序创建单链表

单链表是一种顺序的存储方式,数据结构学的不好,考研又是必考内容,只好从头开始学习,相信不断地积累会有更好的爆发! 首先单链表的创建,单链表是建立在结构体的基础上,要创建单链表首先要建立起一个储存数据的结构体: struct node{int elem;node *next;};elem是数据域,用来存放你要输入的数据,next是指向下个存放数据节点的指针同为node 类型; 下面是

单链表核心操作代码

头插法建立单链表 代码: void createListByHead(LinkList &L,int n){LNode *s;//移动指针s int x;//要插入的元素 L = (LinkList)malloc(sizeof(LNode));//创建头结点 L->next=NULL;//初始化头结点 for(int i=0;i<n;i++){scanf("&d",&x);//输入要插入的值

浅谈单链表与双链表的区别

数组的优点 随机访问性强(通过下标进行快速定位) 查找速度快 数组的缺点 插入和删除效率低(插入和删除需要移动数据) 可能浪费内存(因为是连续的,所以每次申请数组之前必须规定数组的大小,如果大小不合理,则可能会浪费内存) 内存空间要求高,必须有足够的连续内存空间。 数组大小固定,不能动态拓展 链表的优点 插入删除速度快(因为有next指针指向其下一个节点,通过改变指针的指向可以方便的增加删除元素)

数据结构——单链表查询、逆序、排序

1、思维导图 2、查、改、删算法 //快慢排序法找中间值int mid_link(Link_t *plink){Link_Node_t *pfast = plink->phead;Link_Node_t *pslow = pfast;int m = 0;while(pfast != NULL){pfast = pfast->pnext;++m;if(m % 2 == 0){pslow

数据结构--单链表C/C++

最近在学习数据结构,其中有介绍单链表跟单循环链表的,现在复习一下。首先要定义一下数据结构(节点),如下: typedef int DataType; //方便后面修改数据类型,有点像C++/JAVA中的泛型typedef struct Node {DataType data;struct Node *next;}Node; 单链表:  接下来是定义一个获取链表某个位置节点的函数,如

入门数据结构JAVA DS——如何实现简易的单链表(用JAVA实现)

前言 链表(Linked List)是一种线性数据结构,它由一系列节点组成,每个节点包含两个部分:存储数据的部分和指向下一个节点的指针(或引用)。链表的结构使得它能够动态地增长和收缩,适合在不固定长度的序列中进行插入和删除操作。 链表的基本概念: 节点(Node):链表的基本单位,每个节点包含两个部分: 数据域(Data):存储节点的具体数据。指针域(Pointer/Next):存储指

数据结构——单链表相关操作

zhuzhu1、结构框图: 2、增删改查: 定义链表节点和对象类型 /*************************************************************************> File Name: link.h> Author: yas> Mail: rage_yas@hotmail.com> Created Time: Tue 03 Sep

C++ 二维 map vector 赋值 遍历 实例 降序 倒序

默认升序 #include <iostream>#include <map>#include <vector>using namespace std;int main() {std::map<int, std::vector<int>> count;count[44].emplace_back(1);count[44].emplace_back(1);count[2].emplace_b