**
存在一个含有n个元素的单链表,将第i-1个结点与第i个结点互换,指针不变
**
#include<stdio.h>
#include<malloc.h>
//有一个n个结点的单链表 ,将第i-1个结点与第i个结点互换,指针不变
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
/*带头结点的单链表数据元素的访问 */
void ListTraverse(LinkList L, void (*visit)(LNode*))
{
LNode *p=L->next;
while(p)
{
visit(p);
p=p->next;
}
printf("\n");
}
void visit(LNode *p)
{
printf("%d ",p->data);
}
int main()
{
//初始化一个单链表
LNode *L,*p,*r,*q,*q1;
int n;
scanf("%d",&n);
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
r=L;
ElemType e;
while(n--){
p=(LNode*)malloc(sizeof(LNode));
scanf("%d",&e);
p->data=e;
p->next=r->next;
r->next=p;
r=p;
}
//遍历该单链表,查看创建是否成功!
ListTraverse(L,visit);
//第i-1个结点与第i个结点互换,指针不变
int j=0;
q=L;
int k;
// k指的是第i个元素
scanf("%d",&k);
while(q && j<k)
{
q1=q;
q=q->next;
j++;
}
//退出循环,q1是第i-1个元素
if(q==NULL)
return 0;
else{
// printf("%d",q1->data);
ElemType e1=q1->data;
q1->data = q1->next->data;
q1->next->data =e1;
}
ListTraverse(L,visit);
}
/*
5
1 2 3 4 5
*/