带头结点的链表的逆置
2016-11-07 23:22
337 查看
不需要申请新的内存,在原有的链表的基础上实现逆置链表
#include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef struct link{ char data; struct link * next; }LinkList; LinkList * setList(); //初始化链表 void initList(LinkList * ); //初始化链表,给链表赋值 void show(LinkList * ); //输出所有元素 void Reverse(LinkList * L); //逆置链表 int main (){ LinkList * head = setList(); initList(head); show(head); Reverse(head); show(head); system("pause"); return 0; } LinkList * setList (){ LinkList * head = (LinkList *)malloc(sizeof(LinkList)); head ->next = NULL; return head ; } void initList (LinkList * s ){ char ch ; LinkList * p = s; printf("输入元素: (#号结束) \n"); while((ch = getchar()) != '#'){ fflush(stdin); LinkList * temp = (LinkList *)malloc(sizeof(LinkList)); temp ->data = ch ; temp ->next = p ->next ; p ->next = temp; p = p->next; } } void show (LinkList * s){ LinkList * p = s ->next ; printf("\n链表中的元素有: "); while(p != NULL){ printf("%c ",p->data ); p = p->next ; } putchar ('\n'); } void Reverse(LinkList * L) { LinkList * p ; LinkList * q ; p = L->next ; q = p; L->next = NULL; //断开头结点 while (p!= NULL){ q = p -> next ; //获取p的下一个节点的地址 p->next = L->next; //将p节点插入到头结点L后面,p的后记节点指向L原有的节点 L->next = p ; //p为头结点的第一个元素,头结点的后记节点指向p p = q ; //p指向下一个需要交换的节点 } }
相关文章推荐
- 单链表的就地逆置 (单链表带头结点)(某公司校园招聘面试试题)
- PTA(数据结构)-带头结点的单链表就地逆置
- 带头结点的单链表就地逆置
- 6-1 带头结点的单链表就地逆置
- 不带头结点的链表操作及其逆置
- 带头结点的单链表的逆置
- 就地逆置带头结点的单链表
- 对一个不带头结点的单链表进行逆置
- 带头结点单链表的就地逆置
- 基于链表:逆置带头结点的单链表
- 带头结点的单链表的逆置
- 带头结点的单链表就地逆置
- 带头结点的单链表就地逆置
- 带头结点的单链表实现就地逆置的更优方法
- PTA 带头结点的单链表就地逆置(10 分)
- 对带头结点的单链表实现就地逆置的算法分析
- 将带头结点的单链表利用原结点空间将其逆置
- 带头结点的单链表就地逆置(10 分)
- 带头结点的单链表就地逆置
- LinkList_withHeadNode(带头结点的单链表)