数据结构(C语言版)中的删除链表中的一个节点
代码如下:
#include 《stdio.h》
#include 《stdlib.h》
typedef struct List
{
int a;
List* next;
}list;
void newList(list* l)//创建结点
{
list* a;
for (int i = 0; i 《 4; i++)
{
a[i] = (list*)malloc(sizeof(list));
a[i]-》a = i+1 ;
}
l-》next = a;
a-》next = a;
a-》next = a;
a-》next = a;
a-》next = NULL;
}
void printfList(list* l)//打印结点的数据内容
{
printf(“该链表的内容是:\n“);
while (l-》next)
{
printf(“%d\t“, l-》next-》a);
l = l-》next;
}
printf(“\n“);
}
void setList(list* l,int x,int y)
{
list* head = l;
l = l-》next;
while (l)
{
if (l-》a 》=y || l-》a 《=x)//将结点的数据区与指定区域进行比较
{
head-》next = l;//将满足条件的结点连接在新表的最后一个结点
//指针后移
l = l-》next;
head = head-》next;
}
else
{
//不满足的结点进行删除
list* l1 = l;
l = l-》next;
free(l1);
}
}
head-》next = NULL;
}
int main()
{
list* l = (list*)malloc(sizeof(List));
newList(l);//初始化链表
printfList(l);//输出旧表内容
setList(l,1,3);//进行修改
printfList(l);//输出修改后的链表
//system(“pause“);
return 0;
}
扩展资料
链表的特点
1、插入、删除数据效率高,时间复杂度为O(1)级别(只需更改指针指向即可),随机访问效率低,时间复杂度O(n)级别(需要从链头至链尾进行遍历)。
2、和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继指针。
常用的链表类型
1、单链表
1)每个节点只包含一个指针,即后继指针。
2)单链表有两个特殊的节点,即首节点和尾节点。用首节点地址表示整条链表,尾节点的后继指针指向空地址null。
3)性能特点:插入和删除节点的时间复杂度为O(1),查找的时间复杂度为O(n)。
2、循环链表
1)除了尾节点的后继指针指向首节点的地址外均与单链表一致。
2)适用于存储有循环特点的数据,比如约瑟夫问题。
3、双向链表
1)节点除了存储数据外,还有两个指针分别指向前一个节点地址(前驱指针prev)和下一个节点地址(后继指针next)。
2)首节点的前驱指针prev和尾节点的后继指针均指向空地址。
单链表反转的问题怎么解决(C语言)
单链表反转:
比如原链表为 head-》1-》2-》3-》NULL;
反转后:head-》3-》2-》1-》NULL;
实现代码:
#include 《stdio.h》
#include 《stdlib.h》
typedef struct Node
{
int data;
struct Node *next;
}*List;
#define node struct Node
List creat(void);
List re( List head ,List p,List q);
void Outlist( List q );
int main(int argv, char *argc)
{
List head;
List p;
List q;
head = NULL;
head = creat();
p = head-》next;
q = head;
re(head,p,q);
q = head-》next;
Outlist(q);
system(“pause“);
return 0;
}
List creat(void)
{
int data;
List head;
List p;
List q;
int flag = 1;
head = (List)malloc(sizeof(node));
q = head;
do
{
printf(“请输入正数(《MAX_INT输入0表示输入结束):“);
scanf(“%d“,&data);
fflush(stdin);
if ( 0 == data )
{
q-》next = NULL;
flag = 0;
}
else
{
p = (List)malloc(sizeof(node));
p-》data = data;
q-》next = p;
q = p;
}
}while(flag);
q = head-》next;
Outlist(q);
return head;
}
void Outlist( List q )
{
while(NULL != q)
{
printf(“%d “,q-》data);
q = q-》next;
}
printf(“\n“);
return;
}
List re(List head,List p,List q)
{
if(NULL == p)
{
head-》next = q;
}
else
{
p=re(head,p-》next,q-》next);
p-》next = q;
if( head == q)
{
p-》next = NULL;
}
}
return q;
}
动力节点怎样
动力节点,一家十多年专注java开发培训的机构。
2009年,动力节点成立!
动力节点从成立之初,就一直以“做好Java”为目标,用匠人精神,把Java开发这一个培训项目做到最好!
可以从百度百科中看到,动力节点的办学初衷:
为解决当前软件开发技术飞速发展,而企业招不到优秀Java人才的困扰,专注培养面向电商、金融和电信等领域的Java软件人才。(所以动力节点的毕业就业方向,也多是电商、金融和电信等领域)
为什么动力节点只教java。
动力节点是一家只教java开发的培训机构。
有两个原因:
1、动力节点创始人,为java领域大咖。
找工作的时候,看一个企业靠不靠谱,首先看那个公司的老板品格如何,
找机构的时候,看一个机构靠不靠谱,也在于这个机构的老板品格如何。
北京动力节点创始人,董事长兼CEO王勇老师,是国内知名的老牌Java培训讲师,1995年就接触软件开发的第一批互联网人,之后创立动力节点,如今在java行业已有20多年!(百度搜“java王勇”)
在这样一位大咖技术人的带领下,动力节点成立至今,一直很重视培训的技术!一个学员,从有好技术的机构学完毕业,出来是不愁找工作的~
王勇老师的带领下,动力节点越来越好!
2、广撒网,不如专精java开发培训。
因为一家机构,培训多个领域,就需要对多个领域有研究、持续研究、持续开发。一般机构很难做到门门精通的,倒不如专心深耕java领域,把java做好,就足够了。
动力节点相信,Java语言是编程语言里的常青树!不倒翁!所以“制心一处”,为的就是在这个领域更专业,让更多想进入这个领域的同学,提供一个更专业、更高效的学习培训。
单单java语言程序员的就业方向,就包含各个行业、方方面面!
从今年20年起,动力节点正从,一个【坐落于北京】的java机构,开始发展为一个【全国型】的java机构!
目前已经有三个校区,四种版型,动力节点立志于做java开发培训中,各方面都好的机构,欢迎来了解动力节点的更多情况!