上面介绍了,在一个节点之后插入节点的情况。这是通常的情况。如果要向一个链表的头部插入节点,就只需要将新节点的下一个指针指向链表的头指针即可。
在这种情况下,有两点要注意:
1,链表是否为空链表
2,要插入的节点是不是空指针。
代码实现:
//向单链表中插入一个节点(插入在链开始处)
//输入参数:单链表的头指针和要插入的节点指针
//输出参数:无
//返回值:指向单链表的头指针
SingleList* Insert(SingleList *head,SingleList *node)
{
if(node == NULL)
{
return head
}
else if(head == NULL)
{
return node
}
node->next = head
head = node
return head
}
我自己编的,数据定义typedef struct duLNode
{int datastruct duLNode *priorstruct duLNode *next}duLNode,*dulinklist
Status Intilsit_DuL(dulinklist &l)//初始化
{if(!(l=(dulinklist)malloc(sizeof(duLNode)))) return ERROR l->next=NULL l->prior=NULL l->data=0//利用头接点的数据域存放表的长度 return OK}
Status insert_DuL(dulinklist l,int i,int e)
//若表存在,在第i个元素之前位置插入e
{dulinklist p,qint j=1if(i<=0&&i>l->data+1) return ERRORif(!(q=(dulinklist)malloc(sizeof(duLNode)))) return OVERFLOWl->data++q->data=efor(p=lj<ij++)p=p->nextq->next=p->nextif(p->next!=NULL) q->next->prior=qp->next=qq->prior=preturn OK}
Status delete_DuL(dulinklist l,int i)//删除表中第i个元素,本函数不返回其值
{dulinklist p,qint j=1if(l->data==0) {puts("NO data") return ERROR }
if(i<=0||i>l->data)
return ERROR
for(p=lj<ij++)
p=p->next
q=p->next
p->next=q->next
if(p->next!=NULL)
p->next->prior=p
free(q)
l->data--
return OK
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)