单链表的插入操作

从C和指针这本书中学到的优化插入函数写法:

#include<stdio.h>
typedef struct Node{
    int value;
struct  Node*link;
}Node;
int sll_insert(Node **linkp,int new_value){
    Node *current=*linkp;
    while(current!=NULL&&current->value<new_value)
    {
        linkp=¤t->link;
        current=current->link;
    }
    Node* new=(Node*)malloc(sizeof(Node));
    new->value=new_value;
    new->link=current;
    *linkp=new;
}
void pr(Node*p){
    while(p!=NULL)
    {
        printf("%d ",p->value);
        p=p->link;
    }
}

int main(int argc, char *argv[])
{
    int i=10;
    Node *root;
    for(;i>=0;--i)
        sll_insert(&root, i);
    pr(root);
    return 0;
}

输出结果如下:

时间: 2024-11-01 22:05:40

单链表的插入操作的相关文章

带头节点的单链表的插入操作

1.偶然看到了十字链表的应用,想到之前在<数据结构与算法分析>的链表一章中,需要用多重表实现一个简单的查询功能.功能需求如下: “已知 学生 和 学校课程 总数 分别为 40000 和 2500,现在需要得到两份报告,一份显示每门课成注册的所有学生信息, 一份显示每个学生注册了哪些课程.” 显然可以用一个 40000 * 2500 个元素的二维数组来解决,但是每个学生选课数目很少,因此会浪费很多空间.因此选择十字链表来实现. 既然是链表,那么肯定要有插入操作,于是便有了本文.算是对功能实现前的

单链表的插入操作的实现(0952)SUWST-OJ

Description 建立长度为n的单链表,在第i个结点之前插入数据元素data. Input 第一行为自然数n,表示链式线性表的长度:第二行为n个自然数表示链式线性表各元素值:第三行为指定插入的位置i:第四行为待插入数据元素data. Output 指定插入位置合法时候,输出插入元素后的链式线性表的所有元素,元素之间用一个空格隔开.输入不合法,输出“error!”. Sample Input 5 1 2 3 4 5 3 6 Sample output 1 2 6 3 4 5 代码: #inc

单链表的基础操作

单链表中节点的查找.插入.删除.求单链表长度等操作. 按序号查找结点值 在单链表中从第一个结点出发,顺指针next域逐个往下搜索,直到找到第i个结点为止,否则返回最后一个结点指针域NULL. 按序号查找结点值的算法如下: LNode GetElem(LinkList L,int i){ //本算法取出单链表L(带头结点)中第i个位置的结点指针 int j=1; //计数,初始为1 LNode *p = L->next; //头结点指针赋给p if(i==0) return L; //若i等于0,

有序链表的插入操作

C语言教材的有序单链表程序的插入我并不满意,因为链表为空,表尾等原因导致有四种情况要处理,给同学们的阅读造成困难.书上的做法较复杂的一个原因是链表是不带头结点的,所以要考虑新结点插入时会不会变成表头, 例如:当链表为空时, 插入3, 3变成表头,  再插入1, 链表为1->3, 链表头指向1, 代码必须处理这样的情况. 第一部分: 不含头结点的链表插入的非常规思路 下面我给出另外一个思路,新结点一律插入表头,这样就不要考虑链表为空的情况了.但是可能无序,可以从表头开始,相邻节点不符合次序要求交换

面试之路(10)-BAT面试之java实现单链表的插入和删除

链表的结构: 链表在空间是不连续的,包括: 数据域(用于存储数据) 指针域(用于存储下一个node的指针) 单项链表的代码实现: 节点类 构造函数 数据域的get,set方法 指针域的get,set方法 代码: public class Node { Object element; //数据域 Node next; //指针域 //构造方法 public Node(Object obj, Node nextval) { this.element = obj; this.next = nextva

单链表的各种操作

#include <stdio.h> #include <stdlib.h> typedef struct { char data; struct Node * next; }Node, *LinkList; void meau(); LinkList CreateFromHead(); void ListLength(LinkList L); void printLink(LinkList L); LinkList inversePermutation(LinkList L);

单链表顺序插入

向单链表中插入新元素,并保证插入后,元素是有序的. [程序实例] 1 struct ListNode 2 { 3 int val; 4 ListNode *next; 5 }; 6 7 bool sll_insert(ListNode **root, int value) 8 { 9 ListNode *PrevNode =NULL; 10 ListNode *Current = *root; 11 12 while (Current!=NULL && Current->val<

单链表实现“插入”和“删除”操作

在单链表中,又如何实现"插入"和"删除"操作呢? 插入操作: 假设我们要在线性表的两个数据元素a和b之间插入一个数据元素x,已知p为其单链表存储结构中指向结点a的指针.为插入数据元素x,首先要生成一个数据域为x的结点,然后插入在单链表中.根据插入操作的逻辑定义,还需修改结点a中的指针域,令其指向结点x,而结点x中的指针域应该指向b结点,从而实现3个元素a,b和x之间逻辑关系的变化. 假设s为指向结点x的指针.则上述指针修改用语句描述即为: s->next=p-

单链表的插入删除操作(c++实现)

下列代码实现的是单链表的按序插入.链表元素的删除.链表的输出 // mylink.h 代码 #ifndef MYLINK_H #define MYLINK_H #include<iostream> using namespace std; struct node { int data; node *next; }; class list { public: list() { head=NULL; }; void insert(int item); void del(int item); voi