链表的插入操作

这里介绍两种代码最简单(emmm 应该是最简单的)的单链表和双链表的插入操作

  1. 单链表
#include <stdlib.h>
#include <stdio.h>

#define FALSE 0
#define TRUE 1

struct Node
{
    Node *link;
    int value
}
/* linkp在作为参数传递时指示的是指向根指针的指针 */
int sll_insert(register Node **linkp,int new_value)
{
    register Node *current;
    register Node *new;

    // 遍历链表,知道新的值大于或等于节点的值
    while((current=*linkp)!=NULL && current->value<new_value)
        linkp=&current->link;

    new=(Node *)malloc(sizeof(Node));
    if(new==NULL)
        return FALSE;
    new->value=new_value;

    // 插入新节点
    new->link=current;
    *linkp=new;
    return TRUE;
}

  1. 双链表
#include <stdlib.h>
#include <stdio.h>

struct Node
{
    Node *fwd;
    Node *bwd;
    int value
}

/* rootp在作为参数传递时指示的是根指针 */
int dll_insert(register Node *rootp,int new_value)
{
    register Node *this;
    register Node *next;
    register Node *newnode;

    /* 
    遍历链表,查看new_value是否已经存在与链表中,
    是就返回知道新的值大于或等于节点的值,
    否就新建一个节点存储新的值,
    this指向新节点之前的节点,
    next指向新节点之后的节点。
     */
    for(this=rootp;(next=this->fwd)!NULL;this=next)
    {
        if(next->value==new_value)
            return 0;
        if(next->value>new_value)
            break;
    }

    newnode=(Node *)malloc(sizeof(Node));
    if(new_value==NULL)
        return -1;
    newnode->value=new_value; 

    newnode->fwd=next;
    this->fwd=newnode;
    // 如果插入的节点不是在起始位置
    if(this!=rootp)
        newnode->bwd=this;
    else
        newnode->bwd=NULL;
    // 如果插入的节点不是在末尾位置
    if(next!==NULL)
        next->bwd=newnode;
    else
        rootp->bwd=newnode;

    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值