-
创建链表
2018-10-21 16:07:48Node * head_initList() //头插法创建链表 { Node * head = new Node; //创建头指针 Node *s;//临时指针,指向新的节点 int n; while (cin >> n&&n != -1) { s = new Node; s-...1.头插法
新元素从头部插入
Node * head_initList() //头插法创建链表 { Node * head = new Node; //创建头指针 Node *s;//临时指针,指向新的节点 int n; while (cin >> n&&n != -1) { s = new Node; s->data = n; s->next = head ->next ;//将新节点的next指针指向头结点的下一个节点 head->next = s;//头结点指向新插入的节点 } return head; }
运行结果
2.尾插法
每个新节点插到链表尾部(顺序插入)
Node * initList()//尾插法创建链表 { Node *head = new Node; Node *r, *s;//r指向链表尾部 r = head; int n; cin >> n; while (n != -1) { s = new Node;//创建节点 s->data = n; r->next = s;//将节点插入链表尾部 r = s;//尾指针后移 cin >> n; } r->next = NULL; return head; }
运行结果
-
如何创建链表?
2019-07-17 20:11:54引言: 最近我们c语言课学到了链表,好多同学都在说:“哇!链表怎么这么难,根本看不懂呀!...创建链表: 其实创建一个链表也很简单,在我看来,可以分为以下几步: 1.创建头结点。(命名为:head...链表:
链表的组成其实很简单,就是由很多结点组成的。 一个结点包含数据域和指针域,数据域用来存放数据,指针域负责指向其他结点,起到链接的作用。
创建链表:
其实创建一个链表也很简单,在我看来,可以分为以下几步: 1.创建头结点。(命名为:head) 2.在创建一个结点用来保存每次插入的结点.(命名为:p) 3.循环创建一般结点。(命名为:s) 4.将创建的结点与已有的结点链接起来! 5.遍历链表,输出数据。 需要注意的是: 1.创建结点时一定不要忘了给它分配内存空间; 2.创建的所有结点都应该是指针型的结构体; 3.链表一定要有“尾”。
代码如下:
因为我觉得尾插法相对头插更容易理解,所以先用尾插法向你们演示一番。
//尾插法建立链表: #include <stdio.h> #include <stdlib.h>//里面包含了malloc函数 struct LinkList//创建结构体 { int data;//数据域,用来保存数据。 struct LinkList* next;//指针域,用来连接其他结点。 }; int main(void) { struct LinkList* head = (struct LinkList*)malloc(sizeof(struct LinkList));//创建头结点,并分配内存,需要的内存大小就是结构体的大小。别忘了在malloc前进行强制类型转换。(struct LinkList*) head->next = NULL;//头结点指针初始化 struct LinkList* p ;//创建p结点 p结点在尾插法中用于记录链表尾结点,将来插入结点的时候只需要向p结点后插入即可。 p = head;//p结点指针赋值为头结点 int n;//保存链表长度,即结点的个数。 printf("请输入链表长度:\n"); scanf("%d", &n); printf("输入数据:\n"); for (int i = 0; i < n; i++)//循环创建结点 { struct LinkList* s = (struct LinkList*)malloc(sizeof(struct LinkList));//创建s结点,并分配内存 scanf("%d", &s->data);//给s结点赋值。 //尾插法建立链表 p->next = s;//因为插完第一个结点后用p保存了上一个结点,所以再插结点时应该插在p节点后面,这就是尾插。 s->next = NULL;//别忘了让插在尾部的s结点的指针指向NULL。 p = s;//p结点保存刚才的s结点;以保证p始终为链表的最后一个节点 }//至此,链表的创建已经完成了。 p = head;//让p指针从"头"开始。 while (p->next != NULL)//如果p的下一个结点不为NULL,也就是说如果p结点后还有节点存在,那就输出p后面结点中保存的数据。 { printf("%-5d", p->next->data); p = p->next;//p结点后移 } printf("\n"); return 0; }//至此完成了链表的遍历输出。
代码运行结果:
好!接下来就是头插法建立链表了,同样,头插法与尾插法一般无二,所以废话不多说,直接上代码!
//头插法建立链表: #include <stdio.h> #include <stdlib.h>//里面包含了malloc函数 struct LinkList//创建结构体 { int data;//数据域,用来保存数据。 struct LinkList *next;//指针域,用来连接其他结点。 }; int main(void) { struct LinkList *head = (struct LinkList *) malloc( sizeof(struct LinkList));//创建头结点,并分配内存,需要的内存大小就是结构体的大小。别忘了在malloc前进行强制类型转换。(struct LinkList*) head->next = NULL;//头结点指针初始化 struct LinkList *p; int n;//保存链表长度,即结点的个数。 printf("请输入链表长度:\n"); scanf("%d", &n); printf("输入数据:\n"); for (int i = 0; i < n; i++)//循环创建结点 { struct LinkList *s = (struct LinkList *) malloc(sizeof(struct LinkList));//创建s结点,并分配内存 scanf("%d", &s->data);//给s结点赋值。 //头插法建立链表 s->next = head->next; //将链表除链表头的所有节点连接在新建节点之后 head->next = s;//在让头结点指向新节点 注意:和上一语句顺序不能颠倒 }//至此,链表的创建已经完成了。 p = head;//让p指针从"头"开始。 while (p->next != NULL)//如果p的下一个结点不为NULL,也就是说如果p结点后还有节点存在,那就输出p后面结点中保存的数据。 { printf("%-5d", p->next->data); p = p->next;//p结点后移 } printf("\n"); return 0; }//至此完成了链表的遍历输出。
程序运行结果:
-
创建链表及逆序链表
2020-06-28 14:06:10创建链表及逆序链表 前言 最近在刷题,就自己操作了,顺便记录下来。 代码 直接上代码,分为创建链表和反转链表部分,欢迎大家一起讨论。 package com.vic.algorithm; import lombok.Getter; import lombok.Setter;...创建链表及逆序链表
前言
最近在刷题,就自己操作了,顺便记录下来。
代码
直接上代码,分为创建链表和反转链表部分,欢迎大家一起讨论。
package com.vic.algorithm; import lombok.Getter; import lombok.Setter; import org.omg.CORBA.NO_IMPLEMENT; /** * @description: 如何实现一个高效的单向链表逆序输出? * @author: wangqp * @create: 2020-06-18 16:45 **/ public class ReserveLink { public static void main(String[] args) { //创建一个链表 ReserveLink link = new ReserveLink(); ReserveLink.Node first = link.new Node(); first.setValue(1); link.constructLink(first,link.new Node()); System.out.println(first); System.out.println(link.prettyLink(first)); //逆序链表 Node last = null; Node cur = first; while (cur != null){ Node temp = cur.next; cur.next = last; last = cur; cur = temp; } System.out.println(link.prettyLink(last)); } @Getter@Setter class Node{ private Integer value; private Node next; @Override public String toString() { return value.toString(); } } private void constructLink(Node last,Node cur){ if(last.getValue() == 10){ return; } cur.setValue(last.getValue()+1); last.setNext(cur); constructLink(cur,new Node()); } private String prettyLink(Node first){ StringBuilder sb = new StringBuilder(); do { sb.append(first.toString()).append("|"); first = first.getNext(); }while (first!=null); return sb.toString(); } }
顺便格式化输出了下。
-
c++创建链表
2014-11-17 20:16:38创建链表基本操作,c++中的链表的基本操作均有涉及,是初学者的最佳参考 -
JAVA创建链表什么类_用C和JAVA分别创建链表的实例
2021-03-10 00:12:09创建链表、往链表中插入数据、删除数据等操作,以单链表为例。1.使用c语言创建一个链表:typedef struct nd{int data;struct nd* next; } node;//初始化得到一个链表头节点node* init(void){node* head=(node*)...创建链表、往链表中插入数据、删除数据等操作,以单链表为例。
1.使用c语言创建一个链表:
typedef struct nd{
int data;
struct nd* next; } node;
//初始化得到一个链表头节点
node* init(void){
node* head=(node*)malloc(sizeof(node));
if(head==null) return null;
head->next=null;
return head;
}
//在链表尾部插入数据
void insert(node* head,int data){
if(head==null) return;
node* p=head;
while(p->next!=null)
p=p->next;
node* new=(node*)malloc(sizeof(node));
if(new==null) return;
new->data=data;
new->next=null;//新节点作为链表的尾节点
p->next=new;//将新的节点链接到链表尾部
}
//从链表中删除一个节点,这里返回值为空,即不返回删除的节点
void delete(node* head,int data){
if(head==null) return ;
node *p=head;
if(head->data==data){//如何头节点为要删除的节点
head=head->next;//更新链表的头节点为头节点的下一个节点
free(p);
return;
}
node *q=head->next;
while(q!=null){
if(q->data==data){//找到要删除的节点q
node *del=q;
p->next=q->next;
free(del);
}
p=q;//不是要删除的节点,则更新p、q,继续往后找
q=q->next;
}
}
2.java创建链表
创建一个链表
class node {
node next = null;
int data;
public node(int d) { data = d; }
void appendtotail(int d) {//添加数据到链表尾部
node end = new node(d);
node n = this;
while (n.next != null) { n = n.next; }
n.next = end;
}
}
从单链表中删除一个节点
node deletenode(node head, int d) {
node n = head;
if (n.data == d) { return head.next; /* moved head */ }
while (n.next != null) {
if (n.next.data == d) {
n.next = n.next.next;
return head; /* head didn't change */
} n = n.next;
}
}
希望与广大网友互动??
点此进行留言吧!
-
C++ 创建链表
2021-01-03 16:33:211、如何写一个创建链表函数 2、为什么对于单个节点必须要new,而不能使用& 1、如何写一个创建链表函数 代码如下 ListNode* createListNode(vector<int> input) { ListNode dummy = ListNode(-1);... -
单向链表(一) 结构体、创建链表、遍历链表
2014-07-31 12:44:13单向链表(一) 结构体、创建链表、遍历链表 -
C++ 详解创建链表过程
2018-07-21 13:06:14由于清华大学出版社《C++数据结构与算法》书上并没有给出创建链表的方法,因此在网上查找相关代码,感谢此篇博客https://blog.csdn.net/chixujohnny/article/details/50900504提供相关思路。但对于其中的思想博主并... -
倒置链表(c++版)包括(创建链表 打印链表 倒置链表)
2020-05-04 21:13:42创建链表: 头插法 出于个人理解 :创建链表的过程 就是在逐步申请空间 ,同时进行赋值操作。可以把链表看作澡堂存放衣物的柜子(但不是逐个相挨的,可以离散分部),上边的格子用于存放数据,下边的格子用于地址,... -
用C和JAVA分别创建链表的实例
2020-09-04 22:32:58使用用C和JAVA分别创建链表的方法,创建链表、往链表中插入数据、删除数据等操作。 -
C语言创建链表
2019-10-23 13:05:32C语言创建链表 一、链表中结点的存储 链表的结点左边一部分是存放的数据,右边一部分是后继指针指向下一个结点的地址。C语言中通常定义一个结构体类型来存储一个结点,如下: struct ... -
C++创建链表
2018-11-07 15:30:56创建链表写过无数次,但是每次写都要思考,索性总结一个固定的模板,要用直接拿过来就行。 链表的原理这里就不说了,我主要给了一个例子讲解一下链表的创建,比较简单易懂的例子,变形的话以后有空再更。 以下函数... -
创建链表LinkedList
2017-04-24 20:16:00链表是由若干个节点的对象组成的一种数据结构分为单链表和双链表。...创建链表 使用Java.util包中的LinkedList类可以创建一个链表对象 例如 LinkedList mylist=new LinkedList();//创建一个空双链表 ... -
Java创建链表ListNode及遍历链表
2020-11-29 10:46:07案例:本文主要描述Java创建链表ListNode及遍历链表 一、首先创建一个maven工程,配置依赖包 无特殊依赖 二、开始写入自动化测试代码 class ListNode { //类名 :Java类就是一种自定义的数据结构 int val; //数据 ... -
动态链表之创建链表(头插法)
2019-12-17 21:55:27动态链表之创建链表(插入法) 创建链表,并采用插入法将新结点插入到head之后,输入完整的学生数据,构建动态链表。 #include <stdio.h> #include <stdlib.h> struct Student { char name[20]; ... -
带头结点尾插法创建链表.docx
2019-06-08 09:52:10本文讲解如何在C++中,如何用尾插法创建链表,并显示链表。有图解并附源代码 -
Java创建链表ListNode
2020-11-29 11:17:14案例:本文主要描述Java创建链表ListNode 一、首先创建一个maven工程,配置依赖包 无特殊依赖 二、开始写入自动化测试代码 class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public ... -
头插法创建链表
2020-11-19 14:01:16题目:递归创建链表,从键盘上顺序输入整数,直到输入的整数小于0时才停止输入。然后反序输出这些整数。 注意:反序通过头插法创建链表实现,即后创建的链表先输出 【note】单向链表有两种创建方式:1.头插法;2.... -
【C++】C++还能这么用--结构体构造函数、成员函数、创建链表
2020-04-14 16:41:11构造函数2.1 如何定义2.2 如何使用2.3 还有一种写法2.4 示例:创建链表节点3. 与类的区别 1. 成员函数 示例,利用成员函数初始化成员数据: struct Students { // 这是普通成员数据 string name; int age; // ... -
c语言实现头插法创建链表及链表遍历和逆置
2020-10-07 08:42:43从键盘输入一个正整数N(1到100),之后输入N个字符并用头插法(先输入的数据在链表的尾部)创建链表,然后遍历该链表,最后对链表进行逆置并遍历。 要求: 1)写一个主函数 2)写一个函数创建链表 3)写一个函数... -
java中创建链表,实现链表的尾部插入
2020-02-20 10:52:07//目标:创建链表,实现链表结点的尾部插入 class Node_5{ private String data; public Node_5 nextNode; public void setData(String indata){ this.data=indata; } public String getData... -
C++读文件创建链表问题
2020-05-24 11:02:32C++期末成绩存放在文本文件 “Score.txt”中,要求编写程序读取该文本文件创建链表,并在链表上根据学号查找姓名和成绩。 文本文件的各列之间使用空格分隔,文件行数不确定。 要求使用ifstream类和... -
创建链表的小例子
2017-08-13 14:43:42下面编写一个创建链表和输出链表的小例子来解决在学习链表中的困惑 /* 创建链表,打印链表信息 */ #include #include typedef struct list { int vaule; //数据域 struct list *PNext; //指针域 }TNODE, *... -
python-想学好链表吗?从手动创建链表开始
2020-08-31 16:31:14删除链表中的节点:除了结尾...先创建链表 class Node(): def __init__(self, value = None, next = None): ''' 创建链表节点 :param value: 链表的值 :param next: 指向下一个节点的指针 ''' self.valu. -
动态创建链表及打印链表 (链表学习 一)
2017-08-20 17:18:53动态创建链表主要思想:定义三个执行结构体类型数据的指针,head,p1,p2,当输入的值p1->num不为0并且为第一个节点的时候,把该节点赋给头结点 p1这个指针,主要是用来指向刚输入过数据的节点,p2这个指针,主要负责把... -
C语言实现链表之双向链表(三)创建链表
2015-11-24 17:08:50C语言实现链表之双向链表(三)创建链表 上一篇文章已经给出了第一个函数,即为结点分配内存并初始化,这篇文章将给出第二个函数,即创建链表。这个函数比较常用,但是可能需求不一样,注意,双向链表在建立的... -
C语言创建链表错误之通过指针参数申请动态内存实例分析
2020-09-04 04:32:00主要介绍了C语言创建链表错误之通过指针参数申请动态内存,是链表创建过程中非常常见的经典错误。实例中做了较为详尽的分析,需要的朋友可以参考下 -
ListNode Java创建链表
2018-06-09 21:29:00用了一种自创的比较简洁的方式来创建链表 1 class ListNode { 2 //为了方便,这两个变量都使用pub1ic, 3 //存放数据的变量,直接为int型 4 public int data; 5 //存放结点的变量,默认为nu11 6 public ...