双向链表的insert问题

双向链表的insert问题:

  1. 如果insert一个Item,则需要先给他找到一个合适的位置。找到之后再分配空间,再把item加入到节点的储存item的空间中。
  2. 现在,就需要给新建的newnode设置指向。总共需要考虑4种情况:(1)为空链表(2)在链表的起始处(3)在链表的中间位置(4)在链表的末尾
  3. 要想成功insert新节点,需要改动四个指针。(1)newnode->fwd(2)new-node->bwd(3)current->next(4)next->bwd。
    但是有两个指针的方向是确定的,跟新节点所在位置无关:newnode->fwd=next;current->fwd=newnode。
  4. 最后,分别依据current的指向和next的指向来判断是否为链表头或链表尾。由此来确定最后两个指针的指向。
  5. 总结:要修改的指针中,指向前的指针与insert位置无关。指向后的指针需要考虑insert位置。
#include<stdio.h>
#include<stdlib.h>
int 
dll_insert(register Node* rootp, int value)
{
	Node* current=rootp;
	Node* next;
	Node* newnode;

	for (; (next=current->next)!= NULL; current =next)
	{
		if (next->value == value)
			return -1;
		if (next->value < value)
			break;
	}
	newnode = (Node*)malloc(sizeof(Node));
	newnode->value = value;
	newnode->next = next;
	current->next = next;

	if (current != rootp)
		newnode->bwd = current;
	else
		newnode->bwd = NULL;
	if (next != NULL)
		next->bwd = newnode;
	else
		rootp->bwd = newnode;

	return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值