数据结构C语言>3基本链表>3-9具有头结点的链表

本文详细介绍了具有头结点的链表的基本操作,包括输出结点值、查找结点、创建链表和插入结点等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具有头结点的链表,就是有一个虚构的结点,链表的中第一个结点其实是第二个结点。

#include<stdlib.h>

struct llist
{
    
int num;
    
struct llist *next;
};
typedef 
struct llist node;
typedef node 
*llink;

//输出结点值
void printllist(llink head)
{
    llink ptr;
    ptr
=head->next;
    
while(ptr !=NULL)
    {
        printf(
"%d ",ptr->num);
        ptr
=ptr->next;
    }
    printf(
"\n");
}

//找结点
llink findnode(llink head,int value)
{
    llink ptr;
    ptr
=head->next;
    
while(ptr !=NULL)
    {
        
if(ptr->num==value)
        {
            
return ptr;
        }
        ptr
=ptr->next;
    }
    
return NULL;
}

//创造链表
llink createllist(int *array,int len)
{
    llink head;
    llink ptr,ptr1;
    
int i;
    
    head
=(llink)malloc(sizeof(node));
    
if(head==NULL)
    {
        printf(
"内存分配失败!\n");
        
return NULL;
    }
    ptr
=head;
    
for(i=0; i<len;i++)
    {
        ptr1
=(llink)malloc(sizeof(node));
        
if(!ptr1)
        {
            
return NULL;
        }
        ptr1
->num=array[i];
        ptr1
->next=NULL;
        ptr
->next=ptr1;
        ptr
=ptr1;
    }
    
return head;
}

//插入结点
llink insertnode(llink head,llink ptr, int nodevalue,int value)
{
    llink 
new;
    
new=(llink)malloc(sizeof(node));
    
if(!new)
    {
        
return NULL;
    }
    
new->num=value;
    
new->next=NULL;
    
//找结点
    llink getnode;
    getnode
=findnode(head,nodevalue);
    
//如果没找到结点,就是插在第一个结点之前
    if(getnode ==NULL)
    {
        
new->next=ptr->next;
        ptr
->next=new;
    }
    
else//找到指定结点,就插在指定结点后面
    {
        
new->next=getnode->next;
        getnode
->next=new;
        
    }
    
return head;
}





int main(int argc,char *argv[])
{
    
int llist1[6]={1,2,3,4,5,6};
    llink head;
    
    head
=createllist(llist1,6);
    
if(!head)
    {
        exit(
1);
    }
    printf(
"原来的链表:");
    printllist(head);
    head
=insertnode(head,head,6,23);
    printf(
"插入后的链表:");
    printllist(head);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值