模拟创建单向链表

节点类:
public class ListNode {
int data;//数据
ListNode next;//指针
ListNode(int x){data=x;}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public ListNode getNext() {
return next;
}
public void setNext(ListNode next) {
this.next = next;
}
二:生成链表(头插法 尾插法)

public class ListNodeUtil { //链表

public static ListNode createHeadAddNodeList(int[] dataArray){//头插法插入数据
ListNode headNode=new ListNode(0);//创建头结点
headNode.setNext(null);
for(int i=0;i<dataArray.length;i++){
ListNode newNode=new ListNode(dataArray[i]);//赋值数据
newNode.setNext(headNode.getNext());//上一节点的指向赋值给下一节点的指向
headNode.setNext(newNode);//头结点指向尾部节点
}
return headNode;
}
public static ListNode createEndAddNodeList(int[] dataArray){//头插法插入数据
ListNode headNode=new ListNode(0);//创建头结点
headNode.setNext(null);
ListNode pointNode=headNode;//指针节点 一直指向尾节点
for(int i=0;i<dataArray.length;i++){
ListNode newNode=new ListNode(dataArray[i]);
newNode.setNext(pointNode.getNext());
pointNode.setNext(newNode);
pointNode=newNode;
}
return headNode;
}

public static void printHeadAddNodeList(ListNode start){

  if(start!=null){
      System.out.println(start.getData());
      start=start.getNext();
      printHeadAddNodeList(start);//递归输出数据

  }

}

}

头插法与尾出发的区别在与尾插法多了一个指针节点,该节点一直指向链表的尾部

原文地址:http://blog.51cto.com/13919712/2165463

时间: 2024-10-09 23:53:12

模拟创建单向链表的相关文章

实现你的第一个链表——手把手教你创建单向链表

写在前面 这是我原发在独立博客上的文章,用来帮助初学链表的同学们理解链表,现在发在这里供大家批评. 为什么要使用链表? 这是我们首先要考虑的一个问题,我们之前已经学过了数组的使用,可以方便快速地存储大量数据,为何还要引入"链表"的概念呢? 比如我们让50个小朋友排排坐,那事情是很好办的:只需要准备50个椅子,让小朋友们依次坐好即可,这就是数组的使用.但是,如果我们预先不知道有多少小朋友,那事情就不好办了,我们可能需要准备大量的椅子,但这就会浪费很多空间:此外,如果一个新来的小朋友必须进

java模拟实现单向链表

直接上代码 1 package com.bjpowernode.test.datastructure; 2 3 public class Mylinked { 4 5 Node first;//头结点 6 7 int size;//链表的长度 8 9 public void add(Object value) { 10 Node newNode = new Node(value); 11 if (first == null) { 12 first = newNode; 13 } else { 1

单向链表模拟

为什么出这个真理文档呢?方面以后我们的视频不断跟进,高级部分关于JDK源码的学习,所以有些基本的思维要叙述一下,包括AQS,常用数据结构,线程等等.这一个帖子主要是我以前写的模拟常用数据结构的代码,可能有些bug 并且不规范,但是重在学习思维.并没有JDK源码部分考虑多,只是简单的写了一点.分享给大家,关于线程同步器的学习我觉得先会用  然后看源码,接着模拟.好开始数据结构了. 注意:在java数据结构中模拟的话 通过数组和引用可以模拟几乎所有的结构. 链表结构的模拟 1.单向链表 a.基础结构

链表(一)——创建一个最基本的单向链表

1.结点 链表中用来存储一个数据的存储单元. 一个链表至少需要由两部分组成,就是数据域和指针域,一般形式的结点定义为: struct node { Elem data; //Elem类型泛指基本数据类型 struct node *next; } typedef struct node Elemsn; 以上两步等价于: typedef struct node { Elem data; struct node *next; }Elemsn; 2.使用指针变量p表示结点的成员 *p.data //错误

复习下C 链表操作(单向链表)

Object-C 作为C 的包装语言(运行时.消息机制).如果不熟悉C 的话实在玩得太肤浅. 随便深入oc 内部都会接触到C. runtime .GCD.Block.消息机制... 所有强大的功能无不用的 包装体(struct 结构体).使用GCC/Clang (可以google 下.Clang 比GCC 更优化,) 编译指令. 转换OC 为 C . 终端 使用Clang 命令参考 clang -rewrite-objc file.m 查看file.cpp 文件为编译转换的C 单向链表 创建 .

C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)

#include<stdio.h> #include<malloc.h> #define LEN sizeof(struct Student) struct Student //结构体声明 { long num; int score; struct Student* next; }; int n; struct Student* creat() //创建单向链表 { struct Student *head=NULL, *p_before, *p_later; p_before =

链表(二)——单向链表的基本操作(创建、删除、打印、结点个数统计)

1.指针的联动 通过两个指针分别指向前驱和后继结点,并在单向链表上进行移动,当指针指向待处理的结点时,该结点的前驱也有指针指向. 2.设有一个无序单向链表,且数据域的值均不相同,使指针pmin指向最小值结点,并使指针prem指向最小值结点的前驱结点: 代码片段: for(p = head; p; q = p, p = p->next) { if(pmin->data > p->data) { pmin = p; prem = q; } } 3.单向链表的删除算法 注:使用mallo

C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码

实现个算法,懒得手写链表,于是用C++的forward_list,没有next()方法感觉很不好使,比如一个对单向链表的最简单功能要求: input: 1 2 5 3 4 output: 1->2->5->3->4 相当于仅仅实现了插入.遍历2个功能(当然遍历功能稍微修改就是销毁链表了) 用纯C写了份测试代码 /* 基本数据结构的定义以及函数的声明 */ typedef int ElemType; typedef struct Node { ElemType elem; struc

C语言:创建动态单向链表,创建完成后,输出每一个节点的数据信息。

// //  main.c //  dynamic_link_list // //  Created by ma c on 15/8/5. //  Copyright (c) 2015年 bjsxt. All rights reserved. //  要求:写一个函数建立有3名学生数据的动态单向链表,并输出链表中每个结点的所有内容. /* 建立动态链表的思想: 1.开辟一个新结点,并使p1,p2指向它: 2.读入一个学生数据给p1所指的结点: 3.head = NULL,n = 0; 4.判断读