×

c语言链表删除某一个节点 节点 链表

数据结构(C语言版)中的删除链表中的一个节点?单链表反转的问题怎么解决(C语言)

admin admin 发表于2022-07-10 09:01:50 浏览105 评论0

抢沙发发表评论

数据结构(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开发培训中,各方面都好的机构,欢迎来了解动力节点的更多情况!