双向链表节点的删除 -- C语言

代码实现

st_doubNode * removeDoubListNode(st_doubNode** phead, int pos){
	if(NULL == phead || pos < 0){
		printf("%s: param error\n",__func__);
		return NULL;
	}

	st_doubNode * head = *phead;
	st_doubNode * p = NULL;
	st_doubNode * q = NULL;
	st_doubNode * nw = NULL;

	if(0 == pos) { /*首节点*/
		/*摘掉*/
		nw = head;
		p = head->next;
		p->prev = NULL;

		/*清除*/
		nw->next = NULL;
		nw->prev = NULL;

		/*更新头*/
		head = p;
		
	} else { /* 其他节点 */
		nw = findDoubListPos(head, pos);
		p = nw->next;
		q = nw->prev;

		p->prev = q;
		q->next = p;

		nw->next = NULL;		
		nw->prev = NULL;
	}

	*phead = head;

	return nw;
}


void testremoveDoubListNode(void){
	st_doubNode * nw = NULL;

	printf("\n************  testremoveDoubListNode ************ \n");
	
	nw = removeDoubListNode(&gDoubHead, 11);
	if(NULL != n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值