赞
踩
头结点和第0个结点之间
插入新结点,即头插法
,代码如下:int insert_dplink_list_1(node_t *phead,int data){ if(NULL == phead){ printf("入参为NULL\n"); return -1; } //创建新结点 node_t *pnew = NULL; create_dplink_node_2(&pnew,data); //头插到链表 pnew->next = phead->next; pnew->front = phead; if(NULL != phead->next) { phead->next->front = pnew; } phead->next = pnew; return 0; }
操作步骤:
1.创建新结点pnew
;
2.将新结点的后继指针
(即pnew->next
)指向头结点的后继指针
(phead->next
)此处存储的是第0个结点的地址,可能是空指针(NULL
)即pnew->next = phead->next
;
3.再将新结点的前驱地址
(即pnew->front
)指向头结点的地址,即pnew->front = phead
;
4.判断是否有第0个结点;
5.如果存在,则第0个结点的前驱指针指向新结点的地址,即phead->next->front = pnew
;
6.最后,头结点的后继指针(phead->next
)指向新结点的地址(pnew
),即phead->next = pnew
;
尾插法:
在双向链表的最后一个结点后面插入新结点
,即尾插法
,代码如下:
示例代码:
int insert_dplink_list_2(node_t *phead,int data){ if(NULL == phead){ printf("入参为NULL\n"); return -1; } //创建新结点 node_t *pnew = NULL; create_dplink_node_2(&pnew,data); //遍历链表,找到最后一个结点 node_t *ptemp = phead; while(NULL != ptemp->next){ ptemp = ptemp->next; } ptemp->next = pnew; pnew->front = ptemp; return 0; }
pnew
;ptemp
;ptemp->next = pnew
;pnew->front = ptemp
;int insert_dplink_list_3(node_t *phead,int pos,int data){ if(NULL == phead){ printf("入参为NULL\n"); return -1; } if(pos < 0){ printf("插入位置不合理,插入失败\n"); return -1; } node_t *ptemp = phead; int i = 0; for(i = 0; i < pos; i++){ if(NULL == ptemp->next){ break; } ptemp = ptemp->next; } if(i < pos){ printf("插入位置不合理,插入失败\n"); return -1; } //创建新结点 node_t *pnew = NULL; create_dplink_node_2(&pnew,data); pnew->next = ptemp->next; pnew->front = ptemp; if(NULL != ptemp->next) { ptemp->next->front = pnew; } ptemp->next = pnew; return 0; }
ptemp
;pnew
;头插法插入
即可;Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。