[数据结构]双链表

typedef struct NODE{
	struct NODE *fwd;
	struct NODE *bwd;
	int value;
}Node;

双链表的根节点的bwd指针指向双链表的最后一个节点,fwd指针指向双链表的第一个节点,双链表的value字段为空

以下程序是将一个值插入到一个有序的双链表中,如果链表中已经有和该值相同的节点则不插入

#include <stdio.h>
#include <stdlib.h>

typedef struct NODE{
	struct NODE *bwd;
	struct NODE *fwd;
	int value;
}Node;

bool insert(Node *Rootnode,int newvalue);

bool insert(Node *Rootnode,int newvalue)
{
	Node temnode;
	int i = 0;
	temnode = Rootnode;
	Node *newnode = (Node*)malloc(sizeof(Node));
	if(newnode ==NULL)
	{
		printf("malloc fail");
		return false;
	}
	newnode->value = newvalue;
	if (Rootnode->bwd == NULL)
	{
		Rootnode->bwd = newnode;
		Rootnode->fwd = newnode;
		return true;
	}
	for(;temnode->fwd != NULL;temnode = temnode->fwd)
	{
		i++;
		if (temnode->value == newvalue)
		{
			printf("newvalue is already in double link list");
			return true;
		}
		if (temnode->value > newvalue)
		{
			if (i==1)
			{
				newnode->fwd = Rootnode->fwd;
				Rootnode->fwd = newnode;
				newnode->bwd = Rootnode;
				newnode->fwd->bwd=newnode;
			}
			else 
			{
				temnode = temnode->bwd;
				newnode->fwd = temnode->fwd;
				temnode->fwd = newnode;
				newnode->bwd = temnode;
				newnode->fwd->bwd=newnode;
			}
		}
		else
		{
			temnode = temnode->bwd;
			newnode = temnode->fwd;
			newnode->bwd = temnode;
		}
	}

	return true;

}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值