有头结点的初始化
head->next=NULL; p=head->next;(p从头结点的下一个结点元素开始)
无头结点的初始化
head=NULL; p=head;(p从头元素开始)
有头节点的链表插入
int InsertList (LinkLIst H,int i,ElemType e){
LNode* p =H,*s;
int j=0;
while (p&&j<i-1){ //寻找目标插入位置的前一个节点
p=p->next;
j++;
}
if(!p||j<i-1){ //若插入位置不存在,返回失败
return ERROR;
}
s=(LNode * )malloc(sizeof(LNode));
if(!s) return ERROR;
s->data=e;
s->next=p->next; //插入节点,修改指针域
p->next=s;
return 1;
}
无头节点的插入
插入结点时,需要判断一下,当前head为NULL,则插入的是第一个结点,否则插入到末尾位置。就是插入算法要改一下,分为两种情况判断实现插入。同时由于无头结点链表初始是NULL,因此,插入算法返回head.
将两个无头链表结合
例如:将H2中第一个结点a,插入到H1中A结点的前面,
p=h2;q=h1;
h2=p->next; // h2要保证指向2链的表头结点
p->next=q;
h1=p; //h1保证指向1链的头结点
//完成插入,调整指针:
p=h2; //q保持不动。