无头结点的单链表
发布网友
发布时间:2022-06-03 14:31
我来回答
共2个回答
热心网友
时间:2023-10-21 16:50
无头结点的插入跟有头结点插入不同在于 如果节点要插入的位置是第一个位置,即头部,就要进行特殊处理。而有头结点就不用。其他就一样了。
typedef struct node{
elementpe data;
struct node * next;
} LinkList;
LinkList *linkhead,*p;
// ... 初始化,linkhead指向指向无头节点链表,p指向要插入的位置。
void insert(LinkList* linkhead,struct node* p){
if( linkhead == p ){ // 插入首部
p->next = linkhead;
linkhead = p;
}
else{
for(struct node * q;q->next==p;q=q->next){
p=q->next;q->next=p;
}
}
}
而有头节点的话,数据不会插在头结点之前。插入就是一般处理
void insert(LinkList* linkhead,struct node* p){
for(struct node * q;q->next==p;q=q->next){
p=q->next;q->next=p;
}
}
}
热心网友
时间:2023-10-21 16:51
/*****************简单无头结点链表 - 插入结点***********************************************/
struct mylist{
int data;
mylist* next;
}
假设表头指针是head(mylist* head),那么将新增结点分三种情况:
1.在链表最前面添加结点,也即插入为表头
bool add_node_before_head(mylist* h,mylist* node_to_add){//传入表头指针和要添加的结点
if(h){
node_to_add->next=h->next;
h->next=node_to_add;
return true;
}
return false;
}
2.在链表的target_node后添加结点:
bool add_node_after_target(mylist* target_node,mylist* node_to_add){//传入目标结点和要添加的结点
if(target_node){
node_to_add->next=target_node->next;
target_node->next=node_to_add;
return true;
}
return false;
}
3.在链表的结点尾添加结点
bool add_node_at_end(mylist* h,mylist* node_to_add){//传入表头指针和要添加的结点
if(h){
mylist* temp=h;
while(temp->next)temp=temp->next;//找到链表的最后一个结点,跳了循环
node_to_add->next=NULL;
temp->next=node_to_add;
return true;
}
return false;
}