双链表 插入 删除 C/C++
#include<iostream>
using namespace std;
typedef struct Link_Node{
	int data;
	Link_Node *next;
	Link_Node *pre;
};
// 在第K个元素后面插入新的值。
int insert_data(Link_Node *bi_link_list,int k,int value)
{
if(k<0) return -1; // 输入的k不合法
	Link_Node *p = bi_link_list;
	int i =0;
	while(p&&i<k){
		p=p->next;
		i++;
	}
	if(!p) return -1; // 没有找到k的时候,p已经到末尾了
	
	Link_Node *p_new = (Link_Node*)malloc(sizeof(Link_Node));
	
	p_new->data = value;
	// 后缀的接续 不能变
	p_new->next = p->next;
	p->next = p_new;
	// 前缀的接续,没关系
	p_new->pre = p;
	if(p_new->next) p_new->next->pre = p_new;   // 判断是否是最后一个元素,最好不要使用多级指针,在链表末尾的和开始的时候容易出空指针问题,
return 0;
}
int delete_data(Link_Node *bi_link_list,int k)
{
if(k<=0) return -1; // 输入的k不合法。
	Link_Node *p = bi_link_list;
	int i = 0;
	// 找到要删除的元素的上一个元素
	while(p&&i<k-1){
	 	p = p->next;
		i++;
	}
	// 要删除的元素为 p->next
	if(!p||!p->next) return -1;
Link_Node *p_del = p->next;
	p->next = p_del->next;
	if(p_del->next) p_del->next->pre = p; //  最后一个元素不会执行这一句话
	free(p_del);
	return 0;
}
int main()
{
	Link_Node *bi_link_list = (Link_Node*)malloc(sizeof(Link_Node));
	
	Link_Node *current = bi_link_list; // 保存上一个节点
	for(int i = 0;i < 10;i++){
		Link_Node *p_node = (Link_Node*)malloc(sizeof(Link_Node));
		p_node->data = i;
		p_node->next = NULL;
		p_node->pre = current;
		
		current->next = p_node;
		current = p_node;
	}
	current = bi_link_list;
	while(current=current->next) cout<<"当前节点值:"<<current->data<<"下一个节点值:"<<((current->next) ? to_string(current->next->data):"目前已是尾节点")<<endl;
insert_data(bi_link_list,10,90);
	current = bi_link_list;
	while(current=current->next) cout<<"当前节点值:"<<current->data<<"下一个节点值:"<<((current->next) ? to_string(current->next->data):"目前已是尾节点")<<endl;
	
	delete_data(bi_link_list,12);
	current = bi_link_list;	
	while(current=current->next) cout<<"当前节点值:"<<current->data<<"下一个节点值:"<<((current->next) ? to_string(current->next->data):"目前已是尾节点")<<endl;
}
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号