键盘输入一组元素,建立一个带头结点的单向链表(无序)。 要求: 输入整数的长度以及整数; 输出无序的单向链表。

键盘输入一组元素,建立一个带头结点的单向链表(无序)。

要求:

输入整数的长度以及整数;

输出无序的单向链表。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#define N 1000 //这个链表最多有1000个元素
typedef struct list
{
    int data;
    struct list* next;
} SLIST; //定义链表的结构体
SLIST* creatlist(int* a,int n) //建立链表
{
    SLIST* h, * p, * q; int i;
    h = p = (SLIST*)malloc(sizeof(SLIST));
    for (i = 0; i < n; i++)
    {
        q = (SLIST*)malloc(sizeof(SLIST));
        q->data = a[i]; p->next = q; p = q;
    }
    p->next = 0;
    return h;
}
void outlist(SLIST* h) //输出链表
{
    SLIST* p;
    p = h->next;
    if (p == NULL) printf("\nThe list is NULL!\n");
    else
    {
        printf("\nHead");
        do { printf("->%d", p->data); p = p->next; } while (p != NULL);
        printf("->End\n");
    }
}
void main()
{
    SLIST* head; 
    int a[N],i,n;
    scanf_s("%d", &n);
    for (i = 0; i < n; i++)
        scanf_s("%d", &a[i]);  //输入n个整数
    head = creatlist(a,n);
    printf("\nThe list :\n"); outlist(head);
}

img

img


#include "stdio.h"
#include "stdlib.h"

typedef struct _Node {
    int data;
    struct _Node* next;
} Node, *LinkList;
void CreateLinkList(LinkList L, int flag, int len) {
    Node* q;
    for (int i = 1; i <= len; i++) {
        q = (Node*)malloc(sizeof(Node));
        if (flag) {
            scanf("%d", &(q->data));
        } else {
            q->data = rand();
        }
        q->next = L->next;
        L->next = q;
    }
}
void LinkListDump(LinkList L) {
    Node* p = L->next;
    while (p) {
        printf("%d\t", p->data);
        p = p->next;
    }
    printf("\n");
}
int main() {
    int len;
    printf("Please enter the number of the elements:\n");
    scanf("%d", &len);
    int flag = 1; // if flag==1,you will input the elements,else by random;
    LinkList L;
    L = (Node*)malloc(sizeof(Node)); // with the head node;
    L->next = NULL;
    CreateLinkList(L, flag, len);
    LinkListDump(L);
    return 0;
}

img