双向链表

双向链表的头插尾插和删除。

关于链表这一块,其实很简单,只要记得操作的时候,先对新的结点操作,再操作前后。

没有编译。可能有问题,仅供参考。

/***************************************************************************** 
FileName: 双向链表.c
Author:  xx       Version :  1.0        Date: 2018.07.21
Description:     双向链表操作
Version:         1.0 
History:         
      <author>  <time>   <version >   <desc>  
*******************************************************************************/ 

typedef  struct doubleNode* pNode

typedef struct doubleNode
{
	int date;
	struct doubleNode* Next;
	struct doubleNode* prior;
}Node;


struct doubleNode* linkListInit()
{
	struct doubleNode* head = (struct doubleNode*)malloc(struct doubleNode);
	head->date = 0;
	head->Next = NULL;
	head->prior = NULL;
	
	return head;
}

//头插
void insertNode(pNode pHeader,int data)
{
	if(pHeader == NULL)
		return;
	
	struct doubleNode* newDoubleNode = (struct doubleNode*)malloc(struct doubleNode);
	newDoubleNode->date = data;
	//先把新结点的前驱后继确定,再连接新结点与前后两个结点
	newDoubleNode->prior = head;//新的前驱指向头
	newDoubleNode->Next = head->Next;//新的后继指向头的下一个
	newDoubleNode->Next->prior = newDoubleNode;//新的下一个节点的前驱指向新
	head->Next = newDoubleNode;//头的下一个指向新结点
}

void insertNode2(pNode pHeader,int data)
{
	if(pHeader == NULL)
		return;
	
	struct doubleNode* newDoubleNode = (struct doubleNode*)malloc(struct doubleNode);
	newDoubleNode->date = data;
	newDoubleNode->Next = NULL;
	
	struct doubleNode* p = pHeader;
	while(p->Next)
	{
		p = p->Next;
	}
	p->Next = newDoubleNode;
	newDoubleNode->prior = p;
}


void deleteNode(pNode pHeader,int data)
{
	if(pHeader == NULL)
		return;
	struct doubleNode* p = pHeader->Next,q;
	while(p)
	{
		if(p->date == data)
		{
			q = p;
			p = p->Next;
			q->prior->Next = q->Next;
			q->Next->prior = q->prior;
			q->Next = NULL;
			q->prior = NULL;
			free(q);
			continue;
		}
		
		p = p->Next;
	}
}



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值