(由于以前c++没认真学,所以画了几张图,站在内存的角度理解下,马上就搞明白了)
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}Node, *LinkedList;
LinkedList initEmptyLinkedList() {//初始化一个空的LinkedList
Node *L;
L= (Node *) malloc (sizeof(Node));//分配空间
if (L = NULL) {
printf("申请内存空间失败/n");
}
L-> next = NULL;
return L;
}
LinkedList createFromHead() {
Node *L;
L = (Node *)malloc (sizeof(Node));
L -> next =NULL;
ElemType x;
while(scanf(“%d”,&x) != EOF) {
Node*p;
p = (Node*) malloc (sizeof(Node));
p -> data = x;
p ->next = L -> next;
L->next = p;
}
return L;
}
LinkedList createFromEnd()
{
Node *L;
L= (Node *)malloc(sizeof(Node));
L->next = NULL;
Node *r;
r= L;
ElemType x;
while(scanf("%d",&x) != EOF)
{
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = x;
r->next = p;
r = p;
}
r->next = NULL;
return L;
}
LinkedList InsertLinkedList(LinkedList L,int i, ElemType x) {
Node *pre;
pre = L;
int tempi = 0;
for (tempi = 1; tempi< i; tempi ++)
pre =pre -> next;
Node *p;
p = (Node *)malloc (sizeof(Node));
p -> data =x;
p -> next =pre -> next;
pre -> next =p;
return L;
}
//按元素删除节点
LinkedList delete(LinkedList L, ElemType x){
Node *pre, *p;
pre = L;
p = L ->next;
while(true) {
if(p-> data == x) {
pre-> next = p -> next;
free(p);
break;
} else{
pre= p;
p= p -> next;
}
if (p== NULL) break;
}
return L;
}