运行后输入数据,总是卡在第一个,该怎么处理?
void createLink(LinkList head)
{
int i,n=0;
LinkList p;
printf("\n请输入数据个数:");
scanf("%d",&n);
for(int i=0;i<n;i++) {
int temp;
p=(LinkList)malloc(sizeof(Node));
printf("\n数据:");
scanf("%d",&temp);
p->Elem=temp;
p->next=head->next;
head->next=p;
}
case 1://建立线性表
createLink(head);
printf("创建链表成功!\n");
PrintLink(head);
break;
创建的是带头结点的链表,还是不带头结点的链表?下面的代码是带头结点的链表的写法,供参考:
#include <stdio.h>
#include <stdlib.h>
typedef struct list {
int Elem;
struct list* next;
}Node, * LinkList;
void createLink(LinkList head)
{
int i, n = 0;
LinkList p;
printf("\n请输入数据个数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int temp;
p = (LinkList)malloc(sizeof(Node));
printf("\n数据:");
scanf("%d", &temp);
p->Elem = temp;
p->next = head->next;
head->next = p;
}
}
void PrintLink(LinkList head)
{
LinkList p = head->next;
while (p) {
printf("%d ", p->Elem);
p = p->next;
}
printf("\n");
}
int main()
{
LinkList head = (LinkList)malloc(sizeof(Node));
head->next = NULL;
//case 1://建立线性表
createLink(head);
printf("创建链表成功!\n");
PrintLink(head);
//break;
return 0;
}
head是否为空???
p—next是head—next,head—next又是p(head变成p了),是不是又指回去了?
新链表元素插入的算法有问题,不应该直接对头指针进行操作,不然你就丢失整个链表的首地址了,可以写一个新的指针q,代替头指针,从首地址开始循环,直到q的下一节点为null,然后先把新节点的地址给q的next,再将新节点的next指向null
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633