键盘输入一组元素,建立一个带头结点的单向链表(无序)。
要求:
输入整数的长度以及整数;
输出无序的单向链表。
代码如下:
#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);
}
#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;
}