创建带头节点且含有6个数据结点的单链表,结点的值通过键盘输入,然后显示各结点
的值。并在链表第3个位置处插入一新的结点,值为30。(请使用“头插法”创建链
表)
供参考:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Lnode {
ElemType data;
struct Lnode* next;
}Lnode, * LinkList;
void DispList(LinkList L)
{
Lnode* p = L->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void CreatList_H(LinkList* L, int n) { //头插法
(*L) = (LinkList)malloc(sizeof(Lnode));
(*L)->next = NULL;
int i = 0;
for (i = 0; i < n; i++) {
Lnode* p = (LinkList)malloc(sizeof(Lnode));
scanf("%d", &p->data);
p->next = (*L)->next;
(*L)->next = p;
}
}
void InsertNode(LinkList L,int pos, ElemType e)//插入函数
{
int i = 0;
LinkList p = L, q = NULL;
if (pos < 1) return;
while (p->next && i < pos - 1) {
i++;
p = p->next;
}
if (!p->next) return;
q = (Lnode*)malloc(sizeof(Lnode));
q->data = e;
q->next = NULL;
q->next = p->next;
p->next = q;
}
int main()
{
LinkList L;
CreatList_H(&L, 6);//“头插法”创建含有6个数据结点链表
DispList(L); // 显示各结点的值
InsertNode(L, 3, 30);//在链表第3个位置处插入一新的结点,值为30。
DispList(L); // 显示各结点的值
return 0;
}