讨论虚拟头节点

目录

1、什么是虚拟头节点?

2、关于虚拟头节点在头部插入

 3、关于虚拟头节点在尾部插入

4、关于虚拟头节点的创建


1、什么是虚拟头节点?

链表中,对于头部和尾部的插入常常需要做出特殊判断,即是否为空的情况。

所以在此引出虚拟头节点的概念:在链表的表头添加一个节点,在它的数据域中,它不存储任何数据(即为0),在指针域中,指向空(NULL).如果是在循环链表中,指向它自己.

2、关于虚拟头节点在头部插入

将要插入的节点指向虚拟头节点指向的地址,将虚拟头节点指向要插入节点的地址。

这样就完成了一次在头部的插入.

 3、关于虚拟头节点在尾部插入

创建一个同类型的节点cur,将虚拟右节点的地址赋给它.

随后建立建立一个循环,让cur指向后面的节点,知道cur==NULL,

随后重复插入头部的步骤.

4、关于虚拟头节点的创建

typedef struct Node{
	datatype_t data;
	struct Node* next:
}node_t;

 我们先完成一个节点的定义.

首先来看第一种类型:用二级指针的类型创建虚拟头节点

void init(node_t** head){//二级指针是为了改变head的地址                                         
        node_t* p = (node_t*)malloc(sizeof(node_t));        
        if(p==NULL){                                         
                return;                                    
        }                                                        
        memset(p_node,0,sizeof(linkednode_t));                                                              
        p->next = NULL; 
    	*head = p;	
}

main函数里面创建一个node_t类型的节点head,将节点的地址赋值给函数,改变节点的类型.

例如 init(head);

再来看第二种类型:用相同的类型创立虚拟头节点,并将节点通过return返回

node_t* init(){
	// 使用malloc创建空间
	node_t* p = (node_t*)malloc(sizeof(node_t));
	if(NULL==p){
		return NULL;
	}
	return p;//返回同类型的节点
}

同样,我们在main函数里面创建一个node_t类型的节点head,将节点的地址赋值给函数,改变节点的类型.

例如 head = init();

这样就完成了虚拟头节点创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值