1520: 交换节点(线性表)
描述
(线性表)编写一个算法来交换单链表中指针P所指结点与其后继结点,HEAD是该链表的头指针,P指向该链表中某一结点。
格式
输入格式
输入链表长度:6
输入链表:1 2 3 4 5 6
输入p指向的节点:5
输出格式
1 2 3 4 6 5
样例
样例输入 Copy
5
7 6 9 8 2
3
样例输出 Copy
7 6 8 9 2
#include<stdio.h>
#include<stdlib.h>
struct arr
{
int value;
struct arr* next;
};
int main()
{
int num;
scanf("%d",&num);
struct arr *head,p,z;
head=NULL;
for(int a=0; a<num; a++)
{
if(head==NULL)
{
p=(struct arr)malloc(sizeof(struct arr));
scanf("%d",&p->value);
head=p;
}
else
{
z=(struct arr)malloc(sizeof(struct arr));
scanf("%d",&z->value);
p->next=z;
p=z;
}
}
int num_output;
num_output=num;
scanf("%d",&num);
p=z=head;
for(int a=0;a<num-1;a++)
{
p=p->next;
}
int value;
z=p->next;
value=p->value;
p->value=z->value;
z->value=value;
for(int a=0;a<num_output;a++)
{
printf("%d ",head->value);
head=head->next;
}
return 0;
}
注意:
定义struct arr
{
…
}*head,*p,*z;
后不可以直接用;
要malloc后的才可以(如scanf操作)