C语言链表操作

v2版为非健全版本,很明显不能再最前端插入。

int sll_insert_v2(Node *current, int value)
{
    Node *prev;
    Node *newNode;

    while (current != NULL && current->value >= value) {
        prev = current;
        current = current->next;
    }

    newNode = malloc(sizeof(Node));
    if (newNode == NULL) {
        return FALSE;
    }
    newNode->value = value;

    if (prev == NULL) {
        newNode->next = current->next;
        current->next = newNode;
    } else  {
        newNode->next = current;
        prev->next = newNode;
    }
    return TRUE;
}

v3版本实现了插入功能,但是很明显就是,其实所有的插入都是:

新节点链向当前节点的下一 节点

当前节点链向新节点

所以有了第三版本我们需要的就是当前节点  和 指向当前节点link 的一个指针

int sll_insert_v3(Node **rootp, int value)
{
    Node *newNode;
    Node *current;
    Node *prev;

    current = *rootp;

    while (current != NULL && current->value >= value) {
        prev = current;
        current=  current->next;
    }

    newNode = malloc(sizeof(Node));
    newNode->value = value;

    newNode->next = current;
    if (prev == NULL) {
        *rootp  = newNode;
    } else {
        prev->next = newNode;
    }

    return TRUE;
}

v4版本:current为当前版本, rootp为指向当前节点的link 的指针

int sll_insert_v4(Node **rootp, int value)
{
    Node *newNode;
    Node *current;

    while ((current = *rootp) != NULL && current->value >= value) {
        rootp = &current->next;
    }

    newNode = malloc(sizeof(Node));
    newNode->value = value;
    newNode->next = current->next;

    *rootp = newNode;

    return TRUE;
}
时间: 2024-08-11 10:20:57

C语言链表操作的相关文章

C 语言链表操作例程 (待完善)

#include<stdio.h>#include<malloc.h>#include<conio.h>#include<stdlib.h>#include "math.h"#define NULL 0#define LEN sizeof(struct cle) struct cle { int num; struct cle *next; }; int n; char c=0; /*定义输入函数*/ struct cle *input(

关于c语言链表的操作

这几天又讲到链表了,但是又忘记了,所以重新把关于链表的建链表,对链表进行排序,然后是删除,插入,以及遍历等功能..但是最近要考试了,所以没有写成菜单的形式..等考试完了,在进行补充吧.. 代码如下... #include<stdio.h> #include<stdlib.h> #include<string.h> struct node { int data; struct node *next; }; int main() { /*建立链表操作*/ int n,x,p

C语言学习之单向链表操作

该文件为单向链表操作的一些接口:(如发现有错误的地方,及时告知,不胜感激!) list.h #ifndef  _CHAINLIST_H_ #define  _CHAINLIST_H_ typedef struct { char key[15]; char name[20]; int age; }DATATYPE_T; typedef struct Node { DATATYPE_T  data; struct Node *next; }chainListType; /* 添加节点到链表末尾 */

C语言-链表

单向链表:结构体非常适合链表结构,链表的组成:head指针.数据块节点指针p->nest.结束指针NULL. 链表操作:需要首先找到表头head指针.链表的操作包括动态链表的创建.顺序输出.删除节点.插入节点的操作. 动态存储操作函数:(ANSI规则返回的指针类型为void*,早期的为字符型指针) 分配一个块:void *malloc(unsigned int size)  //分配成功则返回指向起始地址的指针void * 分配多个块:void *calloc(unsigned n,unsign

C语言链表实例--玩转链表

下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 name,性别 sex 和成绩 score 等.另一个域为指针域,存放下一结点的首地址.链表中的每一个结点都是同一种结构类型. 指针域: 即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域. 在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域

数据结构上机测试2-1:单链表操作A (顺序建表+关键字删除)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

C语言文件操作函数的编写

 编写文件操作的头文件 /************************************************************************** Copyright(C)    :2014-08-5 toto Filename       :file.h Author          :涂作权 Version         :V1.1 Date            :2014-08-05 Description     :文件操作的头文件 Others  

单链表操作

#include<stdio.h>#include<malloc.h> typedef struct Node{ int data; struct Node *next;}LinkList; //就地反转int LinkListRerverse(LinkList *head){ LinkList *q,*p; p = head->next; head->next = NULL; while(p != NULL){ q = p->next; p->next =

数据结构之链表操作

#include <IOSTREAM> #include <IOMANIP> #include <STRING> using namespace std; typedef struct Student { int id; char name[20]; char sex[20]; struct Student *next; }node; typedef node * pnode; pnode Create(); void Print(pnode h); void Sort