首先想到的肯定是创建一个新的空链表,然后把旧的链表中的元素通过指针p从头到尾遍历,每遍历一个,就把该元素从链表中脱离,添加到新的链表的头部,新建空链表的时候可以初始化一个空的无用节点(仅仅是为了操作方便)。
不通过新建一个新链表,具体是让第一个节点的指针域为NULL,第二个指针域指向第一个节点,第三个指向第二个~~~~~~L指向最后一个节点。
下面是代码:
#include <stdio.h> #include <stdlib.h> typedef struct Node{ int data; struct Node *Next; }Node, *pNode; void InitialNode(pNode *node);//Intial Node void ReverseLink(pNode L);//reverse Link by creating a new link void PrintLink(pNode L);//print Link void ReverseLink2(pNode L);//reverse Link not by creating a new link int main() { Node Header; //define the first for no use Header.data = 0; Header.Next = NULL; pNode pTemp = &Header; for(int i = 0;i < 10; ++i) //initial Link,date is for debug { pNode pNew; InitialNode(&pNew); pNew->data = i; pTemp->Next = pNew; pTemp = pNew; } PrintLink(&Header); //ReverseLink(&Header);//opentional ReverseLink2(&Header); return 0; } void InitialNode(pNode *node) { *node = (pNode)calloc(1,sizeof(Node)); if(!*node) { printf("Error"); return ; } (*node)->data = 0; (*node)->Next = NULL; } void PrintLink(pNode L) { int i = 0; pNode p = L; while(p) { printf("node %d : %d\n",i,p->data); p = p->Next; } printf("\n\n"); } void ReverseLink(pNode L) { pNode q = NULL; pNode p = L; pNode pNewLink; InitialNode(&pNewLink); while(p) { q = pNewLink->Next; pNewLink->Next = p; p = p->Next; pNewLink->Next->Next = q; } printf("reverse Link 1 : \n"); PrintLink(pNewLink); } void ReverseLink2(pNode L) { pNode p = L; pNode r = NULL; pNode q = p->Next; while(q) { r = q->Next; q->Next = p; p = q; q = r; } L->Next = NULL; L = p; printf("reverse Link 2 : \n"); PrintLink(L); }
您还没有登录,请您登录后再发表评论
8581 线性链表逆置
代码主要实现了顺序表 链表 双链表的增删查改操作及链表逆置等常用线性表算法
此为数据结构实习之链表逆置算法实现,简单简短,适合新手阅读学习
链表逆置是计算机科学中一个重要的算法问题,它涉及到链表数据结构的操作和算法设计。在本文中,我们将详细讨论链表逆置的背景、原理、不同方法以及实际应用。 链表是一种常见的数据结构,用于存储一系列元素,其中...
链表逆置
链表 逆置 C++ 数据结构 作业 ~!!!!!!!!! CPP
链表逆置 定义了一个简单的链表节点类 `ListNode`,然后实现了 `reverse_linked_list` 函数来逆置链表。最后,创建一个简单的链表并在逆置之前和之后打印链表的值,以验证逆置操作。
程序员面试中经常遇到的链表逆置问题,采用C++编程实现。
此算法可以将一线性表逆置,如将(a,b,c,d)逆置为(d,c,b,a),逆置后仍占用原来的存储空间
C++单循环链表逆置的算法 ,非常的不错的算法,还支持读文件功能。
C语言算法举例:字符串排序和链表逆置算法。
用C语言实现链表逆置源代码,好好学习数据结构,计算机专业核心课哦,呵呵.
数据结构实训之链表逆置
//用前插法建立单链表,为逆序输入法// /////在单链表的第i个位置插入结点为e///// ////输出单链表////////逆置单链表////
设有一线性表A=(a0
给定程序中,函数fun的功能是将不带头结点的单向链表逆置,即若原链表中从头到尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。 请在程序的下划线处填入正确的内容并把...
多种方法实现链表的逆置。 c语言编写,可以任意字符输入。
链表的逆置,完全由自己完成的,算法自我感觉还不错,十分简洁。自我实现的算法,挺开心。
void revert(ListPointer lp) // 链表的逆置 { SList *p,*q; p=lp;q=NULL;lp=NULL; while(p) { q=p->next; p->next=lp; lp=p; p=q; } /*方法二 SList *p,*q,*end; p=lp->next; q=p->next; end=p; ...
实现链表的逆置功能 采用改变节点中指针的方法, 从第一个节点开始使其后面 的结点依次指向它的直接前 驱结点,最后再将原来的第 一个结点的指针域设为NULL, 并把头结点指向原来的最后 的结点
相关推荐
8581 线性链表逆置
代码主要实现了顺序表 链表 双链表的增删查改操作及链表逆置等常用线性表算法
此为数据结构实习之链表逆置算法实现,简单简短,适合新手阅读学习
链表逆置是计算机科学中一个重要的算法问题,它涉及到链表数据结构的操作和算法设计。在本文中,我们将详细讨论链表逆置的背景、原理、不同方法以及实际应用。 链表是一种常见的数据结构,用于存储一系列元素,其中...
链表逆置
链表 逆置 C++ 数据结构 作业 ~!!!!!!!!! CPP
链表逆置 定义了一个简单的链表节点类 `ListNode`,然后实现了 `reverse_linked_list` 函数来逆置链表。最后,创建一个简单的链表并在逆置之前和之后打印链表的值,以验证逆置操作。
程序员面试中经常遇到的链表逆置问题,采用C++编程实现。
此算法可以将一线性表逆置,如将(a,b,c,d)逆置为(d,c,b,a),逆置后仍占用原来的存储空间
C++单循环链表逆置的算法 ,非常的不错的算法,还支持读文件功能。
C语言算法举例:字符串排序和链表逆置算法。
用C语言实现链表逆置源代码,好好学习数据结构,计算机专业核心课哦,呵呵.
数据结构实训之链表逆置
//用前插法建立单链表,为逆序输入法// /////在单链表的第i个位置插入结点为e///// ////输出单链表////////逆置单链表////
设有一线性表A=(a0
给定程序中,函数fun的功能是将不带头结点的单向链表逆置,即若原链表中从头到尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。 请在程序的下划线处填入正确的内容并把...
多种方法实现链表的逆置。 c语言编写,可以任意字符输入。
链表的逆置,完全由自己完成的,算法自我感觉还不错,十分简洁。自我实现的算法,挺开心。
void revert(ListPointer lp) // 链表的逆置 { SList *p,*q; p=lp;q=NULL;lp=NULL; while(p) { q=p->next; p->next=lp; lp=p; p=q; } /*方法二 SList *p,*q,*end; p=lp->next; q=p->next; end=p; ...
实现链表的逆置功能 采用改变节点中指针的方法, 从第一个节点开始使其后面 的结点依次指向它的直接前 驱结点,最后再将原来的第 一个结点的指针域设为NULL, 并把头结点指向原来的最后 的结点