《数据结构》单链表反转
发布时间:2020-12-15 05:59:14 所属栏目:安全 来源:网络整理
导读:单链表反转 题目描述: /* 设计一个算法,通过一趟遍历,将链表中所有的链接方向反转, 仍利用原表的空间 */ 思想: 先将链表的头结点指针域置空,p指向链表的第一个结点; q指向*p的后继,然后将*p插入到头结点的后面。 void TurnList(LinkList L){struct LN
单链表反转
题目描述:
/*
设计一个算法,通过一趟遍历,将链表中所有的链接方向反转, 仍利用原表的空间 */
思想:
先将链表的头结点指针域置空,p指向链表的第一个结点; q指向*p的后继,然后将*p插入到头结点的后面。 void TurnList(LinkList &L){ struct LNode *p; p=L->next; L->next=NULL; while(p){ struct LNode *q; q=p->next;//q指向*p的后继 p->next=L->next; L->next=p;//将*p插入到头结点之后 p=q; } } 具体实现: #include<stdio.h> #include<iostream> using namespace std; #define MAX 100 typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; int InitList(LinkList &L){ L=new LNode; L->next=NULL; return 1; } void TraveList(LinkList L){ struct LNode *p; p=L->next; printf("遍历链表:n"); while(p){ printf("%d ",p->data); p=p->next; } printf("n"); } //前插法创建单链表 void CreateList(LinkList &L,int n){ L=new LNode; L->next=NULL; for(int i=n;i>0;--i){ printf("请输入第%d个元素的值:",i); struct LNode *p; p=new LNode; scanf("%d",&p->data); p->next=L->next; L->next=p; } } /* 思想: 先将链表的头结点指针域置空,p指向链表的第一个结点; q指向*p的后继,然后将*p插入到头结点的后面。 */ void TurnList(LinkList &L){ struct LNode *p; p=L->next; L->next=NULL; while(p){ struct LNode *q; q=p->next;//q指向*p的后继 p->next=L->next; L->next=p;//将*p插入到头结点之后 p=q; } } int main(){ LinkList L; if(InitList(L)){ printf("链表初始化成功!n"); }else{ printf("链表初始化失败!n"); } printf("请输入链表的长度:n"); int n; scanf("%d",&n); CreateList(L,n); TraveList(L); printf("反转后的链表:n"); TurnList(L); TraveList(L); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |