永发信息网

逆转线性单链表的算法应如何编写?

答案:2  悬赏:40  手机版
解决时间 2021-03-28 03:00
  • 提问者网友:玫瑰园
  • 2021-03-27 08:37
逆转线性单链表的算法应如何编写?
最佳答案
  • 五星知识达人网友:迷人又混蛋
  • 2021-03-27 09:43
反向输出一个链表。
1.程序分析:
2.程序源代码:

#include "stdlib.h"
#include "stdio.h"
struct list
{ int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
void main()
{ link ptr,head,tail;
int num,i;
tail=(link)malloc(sizeof(node));
tail->next=NULL;
ptr=tail;
printf("\nplease input 5 data==>\n");
for(i=0;i<=4;i++)
{
scanf("%d",&num);
ptr->data=num;
head=(link)malloc(sizeof(node));
head->next=ptr;
ptr=head;
}
ptr=ptr->next;
while(ptr!=NULL)
{ printf("The value is ==>%d\n",ptr->data);
ptr=ptr->next;
}}
全部回答
  • 1楼网友:雪起风沙痕
  • 2021-03-27 11:05
#include
#include
typedef char Elemtype;//链表元素类型
typedef struct lnode
{
Elemtype data;
struct lnode *next;
}lnode,*linklist; //链表节点类型和节点指针类型
void createlist(linklist &L,int n)//创建链表,L为头节点,n为需要插入的节点个数
{
L=(linklist)malloc(sizeof(lnode));
L->data='#';
L->next=NULL;
for(int i=n;i>0;i--)
{
linklist p=(linklist)malloc(sizeof(lnode));
Elemtype c;
scanf(" %c",&c);
p->data=c;
p->next=L->next;L->next=p;
}
}
void LinkList_reverse(linklist &L) //链表的就地逆置
{
linklist p,q,s;
p=L->next;q=p->next;s=q->next;p->next=NULL;
while(s->next)
{
q->next=p;p=q;
q=s;s=s->next;
}
q->next=p;s->next=q;L->next=s;
}
void printlinklist(linklist L)//打印链表
{
linklist p;
p=L->next;
while(p)
{
printf("%2c",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
linklist L;int i;
printf("输入创建链表中元素的个数:\n");
scanf("%d",&i);
printf("输入要创建的链表:\n"); //输入序列为倒序
createlist(L,i);
printf("创建的链表为:\n");
printlinklist(L);
LinkList_reverse(L);
printf("链表逆置:\n");
printlinklist(L);
}
例如输入edcba(每输入一次回车)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯