c语言结构体链表的节点删除问题 求助大佬 c语言链表删除节点
c语言 链表节点删除
较为简便的方法是将函数返回值改为people *,然后将函数中所有的return;,改为return pHead;当然,还需要添加一句:
people *del(people *pHead) {
..............
{
printf("通讯录没有任何成员\n");
return pHead; // 修改(1)
}
..........................
while(p1!=0) {
if((p1==pHead)&&strcmp(name,p1->name)==0) //如果目标是第一个
{
........................
return pHead; // 修改(2)
}
else if(strcmp(name,p1->name)==0) //如果不是第一个人
{
........................
return pHead; // 修改(3)
}
.................
}
prinft("没有找到该人\n");
return pHead; // 添加内容
}调用方法改为
pHead = del(pHead);
C语言程序,怎么在结构体链表中插入或者删除某个结构体?
没学过数据结构?那你们老师在干嘛?数据结构不应该是和语言同步进行的吗?
struct A //这就是个结构体,包含数据域和指针域
{
int a;//数据域,可以是任何类型的。
char b;//数据域
A *p;//指针域,就是struct A类型。
};链表,一般是动态的。你要静态的就不用malloc分配就行了。定义N个struct A就行了。
struct A a1;
struct A a2;
struct A a3;
struct A a4;
//a1作为第一个节点
a1->next = a2;
a2->next = a3;
a3->next = a4;
a4->next = NULL;
//插入,在a2后面插入a5
struct A a5;
a5->next = a2->next;
a2->next = a5;//注意指针的赋值顺序。虽然全部是静态的问题不大。动态分配的时候不仔细会造成断链,内存溢出。
//删除a5
a2->next = a5->next;//静态不存在释放的问题,动态申请的请释放a5;
C语言链表删除节点代码求教
删除后 如果输入的字符是链表的最后一个 运行结果会可能出现 段错误
p=p->next 这句可能指向不明地址 段错误可能出现
c语言数据结构(链表的插入和删除)
下面是我的源代码,你看看,应该可以帮上你的 :-)
/*
* singleLinkedList.cc
*
* Created on: 2010-6-1
* Author: LiuFeng
*
*/
#include <iostream>
#include <cstdlib>
#include <cstdio>
typedef struct node {
int data;
node* next;
} node;
node*
search_node(node* head, int pos){
node*p=head->next;
if(pos<0){
printf("incorrect position to search node:\n");
return NULL;
}
if(pos==0){
return head;
}
if(p==NULL){
printf("List is empty\n");
return NULL;
}
while(--pos){
if((p=p->next)==NULL){
printf("incorrect postion to search node!\n");
break;
}
}
return p;
}
node*
insert_node(node* head, int pos, int data){
node* item=NULL;
node* p;
item = (node*)malloc(sizeof(node));
item->data=data;
if(pos==0){
head->next=item;
return head;
}
p=search_node(head,pos-1);
if(p!=NULL){
item->next=p->next;
p->next=item;
}
return head;
}
node*
delete_node(node*head, int pos){
node* item=NULL;
node* p = head->next;
if(p==NULL){
printf("link is empty\n");
return NULL;
}
p=search_node(head, pos);
if(p!=NULL&& p->next!=NULL){
item=p->next;
p->next=item->next;
delete item;
}
return head;
}
int length(node * head){
int len=0;
node *p;
p=head->next;
while(p!=NULL){
++len;
p=p->next;
}
return len;
}