都是一些语法错误和不够细心的问题。。。#include<stdio.h>
#include<stdlib.h>
#include<time.h>
struct Node {
int data;
struct Node *next;
};
typedef struct Node *List;
List Creat();
List Creat()//创建单链表
{
int i, n;
printf("请输入链表的长度:");
scanf_s("%d", &n);
List L = (List)malloc(sizeof(struct Node));
List Head = L;
if (!L)
return NULL;
L->next = NULL;
srand(time(0));
for (i = 0; i < n; i++)
{
List p = (List)malloc(sizeof(List));
if (!p)
return NULL;
p->data = rand() % 100 + 1;
p->next = NULL;
L->next = p;
L = p;
}
return Head; //返回值一般为头节点,而不是尾节点
}
void swap(List L, int n);
void swap(List L, int n)/*交换是当前位置和后面一个位置交换*/
{
int i;
for (i = 1; i < n; i++)
L = L->next;
if (L->next == NULL) // =赋值,应该是逻辑等于==
{
printf("错误输入\n");
return;
}
List L1, L2;
L1 = L->next;
L2 = L1->next;
L1->next = L2->next;
L->next = L2;
L2->next = L1;
}
//} //多了个括号。。。
void print(List L);
void print(List L)//打印链表
{
L = L->next;
int i;
for (i = 0; L != NULL; i++)
{
printf("%d\t", L->data); //p不知道从哪来的,逻辑上看应该是L
L = L->next;
}
printf("\n");
}
int main()
{
List L;
L = Creat();
print(L);
int n;
printf("请输入交换的元素于链表所在位置:");
scanf_s("%d", &n);
swap(L, n);//这里是不是应该传入地址???
printf("交换后:");
print(L);
return 0;
}
|