创建链表使用头插法无法创建是怎么回事?

运行后输入数据,总是卡在第一个,该怎么处理?

img


头插法及相关代码如下:

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