4. 试写一算法,对带头结点的单链表实现就地逆置(假设表长大于2)。
答案:2 悬赏:60 手机版
解决时间 2021-02-24 19:24
- 提问者网友:难遇难求
- 2021-02-23 20:51
4. 试写一算法,对带头结点的单链表实现就地逆置(假设表长大于2)。
最佳答案
- 五星知识达人网友:夜风逐马
- 2021-02-23 21:50
假设头结点指针head 尾结点指向空
算法如下:
Node* temp->=head->next;
Node* flag=head->next;
while(temp)
{
flag=temp;
flag->next=head->next;
head->next=flag;
temp->next=temp;
}
解释看图片(画的不好)
算法如下:
Node* temp->=head->next;
Node* flag=head->next;
while(temp)
{
flag=temp;
flag->next=head->next;
head->next=flag;
temp->next=temp;
}
解释看图片(画的不好)
全部回答
- 1楼网友:酒醒三更
- 2021-02-23 23:06
#include
#include
#define MAXSIZE 100
typedef int datatype;
typedef struct link_node{
datatype data;
struct link_node *next;
}node;
void init(node**p)
{
int x;
node *pre,*q;
pre=*p;
scanf("%d",&x);
while(x!=0)
{
q=(node*)malloc(sizeof(node));
q->data=x;
if(!pre)
{
*p=pre=q;
}
else{
pre->next=q;
pre=q;
}
scanf("%d",&x);
}
pre->next=NULL;
}
node*nizhuan(node*p)
{
node *pre,*q;
node*r;
r=p;
pre=p;
if(!p||!p->next) return p;
else{
q=pre->next;
while(q->next)
{
pre=q;
q=q->next;
pre->next=p;
p=pre;
}
q->next=p;
p=q;
r->next=NULL;
return p;
}
}
void display(node*p)
{
node* q;
q=p;
if(!q) printf("单链表为空!");
else{
while(q)
{
printf("%5d",q->data);
q=q->next;
}
}
printf("\n");
}
main()
{
node *p=NULL;
init(&p);
display(p);
p=nizhuan(p);
display(p);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯