链表的输入输出以及就地逆转
2013-12-16 11:15
176 查看
链表是个好东西,分享出来记录在这里,方便查找。
另外如struct member * list新建节点要赋值的时候,必须先分配内存空间list = (struct member *)malloc(sizeof(struct member))
然后才能赋值list->data = xxxx;
另外如struct member * list新建节点要赋值的时候,必须先分配内存空间list = (struct member *)malloc(sizeof(struct member))
然后才能赋值list->data = xxxx;
/*20131215 Denyz 链表是输入输出及就地逆转*/ #include <stdio.h> #include <malloc.h> typedef struct{ int num; int name; }Elementype; typedef struct LinkList{ Elementype elem; struct LinkList *next; }LList; /*链表的创建i个元素,返回Head指针*/ LList *CreatList(int length) { int i=0,data; LList *Head,*PL,*PLn; printf("Input the Link List:\n"); Head = (LList *)malloc(sizeof(LList)); PL=Head->next=(LList *)malloc(sizeof(LList));//第一个结点 scanf("%d",&PL->elem.num); PL->next=NULL; for(i=1;i<length;i++) { PLn=(LList *)malloc(sizeof(LList));// scanf("%d",&data); PLn->elem.num=data; PLn->next=PL->next; PL->next=PLn;//将新结点接入链表 PL=PLn; } return Head; } //线性链表就地逆转函数,用“砍头”法 //砍断头结点后,在头结点和Head指针的中间不断插入链表的结点,从而达到链表逆转的目的 void Reverse(LList *Head) { LList *PL1,*PLn,*Tmp; PL1=Head->next; PLn=PL1->next;//先保存头结点后面一个结点的指针,不然头结点砍断后将丢失后面的结点 PL1->next=NULL;//砍断第一个结点,也就是头结点 while(PLn) { Tmp=PLn->next;//用Tmp保存当前结点的next结点的指针,确保砍断当前结点后丢失后面的结点。 PLn->next=PL1; Head->next=PLn; PL1=PLn;//PLn成为下一个结点的next指针的指向目标 PLn=Tmp;//PLn变成需要插入的结点的指针了 } } void ShowList(LList *Head) { LList *PL; PL=Head->next; printf("List is: "); while(PL) { printf("%d ",PL->elem.num); PL=PL->next; } printf("\n"); } void main() { int num; LList *Head; Head=CreatList(4);/*构建4个数据的链表*/ ShowList(Head); printf("Reverse the LinkList:\n"); Reverse(Head); ShowList(Head); getch(); }
相关文章推荐
- 输入一个链表,反转链表后,输出链表的所有元素。就地逆转,头插法
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
- 链表的输入输出及逆转
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 就地逆转输出链表
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 21.输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 13.输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- 有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别
- 有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别
- 单链表的就地逆转 -- 浙大《数据结构》第二版 例2.4
- 单链表的创建,插入,删除以及就地逆转
- 剑指offer 01-06解答思路以及代码(顺序数组找特定数字,替换空格字符,链表反转输出,重建二叉树,两个栈实现队列效果,旋转数组最小元素)
- java实现输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- C语言中字符的输入输出以及计算字符个数的方法详解
- MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
- 输入一个链表,输出该链表中倒数第k个结点。
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- hdu 4006 输入新数后输出第k大的数 set以及优先队列2中做法