链表的增删(未考虑末尾)


#include<iostream>
using namespace std;

class node{
public:
node():value(0),next(NULL){}
~node(){}
int value;
node* next;
};///be careful this ;

node* createlist(int a[],int n)
{
node* startnode = new node[n];
node* ret = startnode;
for(int i = 0;i<n;i++)
{
startnode[i].value = a[i];
if(i<n-1)
startnode[i].next = startnode + i + 1;
}
while(startnode)
{
cout<<" "<<startnode->value;
startnode = startnode->next;
}
cout<<endl;
return ret;
}

node* insertnode(node* nd,int n)///在第n个元素后面加数
{
node* temp = nd;
node* startnode = nd;

while(--n) ////注意这个符号的顺序
temp = temp->next; ///这样就知道了第n个数

node* nnode = new node;
nnode->value = 123;
nnode->next = temp->next;
temp->next = nnode;

while(startnode)
{
cout<<" "<<startnode->value;
startnode = startnode->next;
}
cout<<endl;
return nd;///暂时不考虑插入头这种情况
}

node* deletenode(node* nd,int n)
{
node* temp = nd;
node* t;
node* startnode = nd;
n = n -1;
while(--n)
temp = temp->next;
t = temp->next ;
temp->next = temp->next->next;
delete t;
while(startnode)
{
cout<<" "<<startnode->value;
startnode = startnode->next;
}
cout<<endl;
return nd;
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9};
node * t = createlist(a,9);
insertnode(t,3);
deletenode(t,4);
}

链表的增删(未考虑末尾),布布扣,bubuko.com

时间: 2024-08-25 00:23:11

链表的增删(未考虑末尾)的相关文章

单链表的增删查改等基本操作C++实现

单链表的初始化.增删查改.遍历一次找中间结点.删除一个无头单链表的非尾结点(不给头结点) #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef int DataType; typedef struct ListNode { struct ListNode* _next; DataType _data; }ListNode; void InitList(ListNode* &pHead) {

C语言链表的增删查改

小经验:在VS2017中,使用while(scanf(“%d”,&i)!= NULL){......}时,结束输入需要输入三次ctrl+z+空格 func.h #include <stdlib.h> #include <string.h> typedef struct student { int number; struct student* pnext; }stu, *pstu; void list_print(pstu);//打印 void list_head_inse

[原创]用C++类实现单向链表的增删查和反转操作

数据结构这东西,理解起来不算难,但是实现难度就不小了,虽然思路很清晰,但不知道从何下手还有语言的细节问题一直是阻碍初学者的主要障碍(比如我).今天用了一下午时间终于独立完成了链表操作. 找网上的代码,大多用了结构体,还有些并不适合刚学c++或者数据结构的人看,于是我是用类写的,代码比较符合学生的习惯和水平. 先看类定义 class node { public: int data; node *next; }; class linklist { node *h; ……//一些函数 } 两个类,no

单链表的增删查 逆置 倒数第k个节点等问题

    对于单链表而言,它没有双链表那么复杂,它只有头节点,尾节点,节点数据,后继指针.在下面本人实现了 单链表的 增   删   插  查  改.      #include<stdio.h> #include<assert.h> #include<malloc.h> #include<stdlib.h> typedef int Datatype; typedef struct SListNode { Datatype data; struct SList

Java带头节点单链表的增删融合以及是否有环

带头节点单链表 1.优势: 1)当链表为空时,指针指向头结点,不会发生null指针异常 2)方便特殊操作(删除第一个有效节点或者插入一个节点在表头) 3)单链表加上头结点之后,无论单链表是否为空,头指针始终指向头结点,因此空表和非空表的处理也统一了,方便了单链表的操作,也减少了程序的复杂性和出现bug的机会. 4)代码更加简单易懂 2.相关操作 1)建立单链表 即建立一个头结点 static class Entry<T> { T data; // 链表节点的数据域 Entry<T>

单向链表的增删查改

链表(Linked List) 链表是有序的列表 链表是以节点的方式来存储,是链式存储 每个节点包含data域,next域:指向下一个节点 链表的各个节点不一定是连续存储 链表分带头节点的链表和没有头节点的链表,根据实际需求来确定 单链表的增删改查 package linkedlist; import javax.swing.plaf.synth.SynthSeparatorUI; public class SingleLinkedListDemo { public static void ma

LintCode链表题总结

由于链表本身结构的单一性,链表的题目很少会有很大的变种,基本都是围绕几个基本的考点出题目.所以链表的题目比较好掌握,但是链表的题目又不太容易一次就AC通过,由于边界情况未考虑.空指针(比如head.next不存在但是却给head.next赋值了,就会抛出nullpointer的错误).越界等边界情况,我们需要在测试用例的时候多考虑边界条件.在模拟计算的时候一定要用纸和笔把中间的操作过程给画出来,这样比较容易形成思路. 在LintCode的ladder1中,链表那一章有如下这一些题目: 此外,Li

链表:静态链表

静态链表的增删插改,注意方法中的边界检查和参数有效性检查.测试用例应全面!!! #include<stdio.h> #include<stdlib.h> #include<assert.h> #define MAX_SIZE 10 typedef int DataType; typedef struct SeqList { DataType _array[MAX_SIZE]; // 静态数组 size_t _size;    // 数据的个数 }SeqList; voi

每天一个小算法(2)----合并两个有序链表

每天一个小算法还是有点没时间,尽量抽出时间写一写. 今天是合并有序的链表,对单链表有点忘了,尤其是指针指来指去的,有点晕,幸好基础还算好,想了想还是能想回来. 代码使用随机数函数生成一个链表,然后对链表排序,最后合并链表并打印,删除链表的函数于算法无关紧要,所以未实现^_^. 在Linux/g++下编译运行成功. 合并思路:和合并数组有些类同,比较两个节点的元素大小然后将小的摘下来尾插到链表bList中,然后指针指向下一个节点,最后直接把非空的链表合并到bList的末尾. 1 #include