单链表的java代码实现 java中单链表

求java 单链表基本操作的实现/*
注意:链表的结点数量用size表示 , 结点的位置为0~size-1
*/
import java.util.Scanner;
public class Test7 {
public static void main(String[] args) {
try{
LinkList list = new LinkList();
Integer value;
int pos = 0;
Scanner input = new Scanner(System.in);
String choice = null;
//测试A
while(true){
System.out.print("请输入待插入结点的值(x或X退出):");
choice = input.next();
if(choice.toUpperCase().equals("X")){
break;
}
value = https://www.04ip.com/post/Integer.valueOf(choice);
if(list.addAt(pos, value) == true){
System.out.println("插入值为 "value" 的结点到当前链表成功!");
pos;
}
else{
System.out.println("插入结点失败!");
}
}
System.out.print("当前链表所有结点:");
list.listAll();
//测试B
while(true){
System.out.print("请输入待查询结点的值(x或X退出):");
choice = input.next();
if(choice.toUpperCase().equals("X")){
break;
}
value = https://www.04ip.com/post/Integer.valueOf(choice);
pos = list.findByValue(value);
if(pos == -1){
System.out.println("当前链表中不存在值为 "value" 的结点");
}
else{
System.out.println("值为 "value" 的结点在当前链表中的位置为 "pos);
}
}
//测试C
while(true){
System.out.print("请输入待删除结点的位置[0~"(list.getSize()-1)"](x或X退出):");
choice = input.next();
if(choice.toUpperCase().equals("X")){
break;
}
pos = Integer.valueOf(choice);
if(list.removeAt(pos) == true){
System.out.println("删除当前链表中 "pos" 位置的结点成功!");
}
else{
System.out.println("删除结点失败!");
}
}
System.out.print("当前链表所有结点:");
list.listAll();
}
catch(Exception e){
e.printStackTrace();
}
}
}
/**
* 链表结点类
*/
class Node{
private Object data;//链表结点的数据域
private Node next;//链表结点的指针域,指向直接后继结点
public Node(){
data = https://www.04ip.com/post/null;
next = null;
}
public Node(Object data, Node next){
this.data = https://www.04ip.com/post/data;
this.next = next;
}
public Object getData(){
return this.data;
}
public void setData(Object data){
this.data = https://www.04ip.com/post/data;
}
public Node getNext(){
return this.next;
}
public void setNext(Node next){
this.next = next;
}
}
/**
* 链表类
*/
class LinkList{
private Node head = null; //头结点指针
private int size = 0;
public LinkList(){
head = new Node();
size = 0;
}
//在i位置插入元素elem
public boolean addAt(int i, Object elem) {
if(i0 || isize){
return false;
}
Node pre,curr;
int pos;
for(pre=head; i0pre.getNext()!=null; i--,pre=pre.getNext());
curr = new Node(elem, pre.getNext());
pre.setNext(curr);
size;
return true;
}
//删除i位置的元素
public boolean removeAt(int i) {
if(i0 || i = size){
return false;
}
Node pre,curr;
for(pre=head; i0pre.getNext()!=null; i--,pre=pre.getNext());
curr = pre.getNext();
pre.setNext(curr.getNext());
size--;
return true;
}
//根据值value查询结点是否存在 , 若存在返回位置,否则返回-1
public int findByValue(Object value){
Node curr;
int pos;
for(pos=0,curr=head.getNext(); curr!=null; pos,curr=curr.getNext()){
if(curr.getData().toString().equals(value.toString())){
break;
}
}
if(curr==null){
return -1;
}
return pos;
//return (curr!=null ? pos : -1);
}
public int getSize(){
return size;
}
public boolean isEmpty(){
return (size==0);
}
public void listAll(){
for(Node curr=head.getNext(); curr!=null; curr=curr.getNext()){
System.out.print(curr.getData()"\t");
}
System.out.println();
}
}
java如何实现单链表/**
* 结点类
*/
private static class NodeT {
T nodeValue; // 数据域
NodeT next; // 指针域保存着下一节点的引用
Node(T nodeValue, NodeT next) {
this.nodeValue = https://www.04ip.com/post/nodeValue;
this.next = next;
}
Node(T nodeValue) {
this(nodeValue, null);
}
}
java中如何将数组中的元素转入到单链表中,且能够实现按值查找 。(需代码),谢谢!import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.TreeSet;
public class Day16_LinkedList {
static Scanner sc=new Scanner(System.in);
public static void main(String[] args) {
Integer[] arr= {1,2,3,0,5,6,7,8,0,0,0,1,2,3};
LinkedListInteger lin=new LinkedList();
lin.addAll(Arrays.asList(arr));
while(true) {
sop(Arrays.toString(arr));
sop("输入想查找单链表的java代码实现的值:");
int value=https://www.04ip.com/post/sc.nextInt();
lookUp(lin,value);
}
}
public static void lookUp(LinkedList? list,int key) {
LinkedList? tem=(LinkedList?) list.clone();
TreeSetInteger ts=new TreeSet();
int count=0;
while(true) {
int x=tem.indexOf(key);
int y=tem.lastIndexOf(key);
if(x0||y0) {
break;
}
if(x!=y) {
count =2;
tem.removeFirstOccurrence(key);
tem.removeLastOccurrence(key);
ts.add(x);
ts.add(y);
}else {
count;
ts.add(y);
break;
}
}
if(count1) {
sop("目标不存在\r\n");
return;
}
sop("目标索引位置是:" ts "\t该值共:" ts.size() " 个\r\n");
}
【单链表的java代码实现 java中单链表】 private static void sop(String str) {
System.out.println(str);
}
}
重复单链表的java代码实现的也能全部找出来!
在单链表中,在偶数位插入新节点?写出算法思想以及相应的代码?在单链表中插入新节点的算法思想是:
1.创建一个新节点 , 包含要插入的数据 。
2.从链表的头部开始遍历链表,找到要插入位置的前一个节点 。
3.将新节点的 next 指针指向前一个节点的 next 指针所指向的节点 。
4.将前一个节点的 next 指针指向新节点 。
下面是用 Java 实现的代码:
用java单链表实现一元多项式相加的算法?public class Test {
public static void main(String[] args) {
try{
LinkList list1 = new LinkList();
LinkList list2 = new LinkList();
LinkList list3 = null;
list1.addAt(0, new Item(1, 5));
list1.addAt(1, new Item(-1.5, 3));
list1.addAt(2, new Item(1, 1));
list2.addAt(0, new Item(0.5, 5));
list2.addAt(1, new Item(0.5, 4));
list2.addAt(2, new Item(1.5, 3));
list2.addAt(3, new Item(3, 0));
list3 = mergeLinkList(list1, list2);
System.out.println("一元多项式单链表的java代码实现的相加过程单链表的java代码实现:");
list1.listAll();
System.out.println("");
list2.listAll();
System.out.println(" = ");
list3.listAll();
}
catch(Exception e){
e.printStackTrace();
}
}
/**
* 一元多项式的一般项类
*/
class Item{
private double coef;//一元多项式的一般项的系数
private int exp;//一元多项式的一般项的指数
public Item(){
this.coef = 0.0;
this.exp = 0;
}
public Item(double coef, int exp){
this.coef = coef;
this.exp = exp;
}
public double getCoef(){
return this.coef;
}
public void setCoef(double coef){
this.coef = coef;
}
public int getExp(){
return this.exp;
}
public void setExp(int exp){
this.exp = exp;
}
}
/**
* 链表结点类
*/
class Node{
private Item data;
private Node next;//链表结点的指针域单链表的java代码实现,指向直接后继结点
public Node(){
data = https://www.04ip.com/post/null;
next = null;
}
public Node(Item data, Node next){
this.data = https://www.04ip.com/post/data;
this.next = next;
}
public Item getData(){
return this.data;
}
public void setData(Item data){
this.data = https://www.04ip.com/post/data;
}
public Node getNext(){
return this.next;
}
public void setNext(Node next){
this.next = next;
}
}
/**
* 链表类
*/
class LinkList{
private Node head = null; //头结点指针
private int size = 0;
public LinkList(){
head = new Node();
size = 0;
}
//在i位置插入元素elem
public boolean addAt(int i, Item elem) {
if(i0 || isize){
return false;
}
Node pre,curr;
int pos;
for(pre=head; i0pre.getNext()!=null; i--,pre=pre.getNext());
curr = new Node(elem, pre.getNext());
pre.setNext(curr);
size;
return true;
}
//删除i位置的元素
public boolean removeAt(int i) {
if(i0 || i = size){
return false;
}
Node pre,curr;
for(pre=head; i0pre.getNext()!=null; i--,pre=pre.getNext());
curr = pre.getNext();
pre.setNext(curr.getNext());
size--;
return true;
}
java是一种可以撰写跨平台应用软件的面向对象的程序设计语言 。Java 技术具有卓越的通用性、高效性、平台移植性和安全性单链表的java代码实现,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网单链表的java代码实现,同时拥有全球最大的开发者专业社群 。
java如何实现链表链表是一种重要的数据结构单链表的java代码实现 , 在程序设计中占有很重要的地位 。C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言比C和C++更容易实现链表结构 。Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以单链表的java代码实现我们可以编写这样的类来实现链表中的结点 。
class Node
{
Object data;
Node next;//指向下一个结点
}
将数据域定义成Object类是因为Object类是广义超类,任何类对象都可以给其赋值,增加了代码的通用性 。为了使链表可以被访问还需要定义一个表头,表头必须包含指向第一个结点的指针和指向当前结点的指针 。为了便于在链表尾部增加结点,还可以增加一指向链表尾部的指针,另外还可以用一个域来表示链表的大小 , 当调用者想得到链表的大小时,不必遍历整个链表 。下图是这种链表的示意图:
链表的数据结构
我们可以用类List来实现链表结构,用变量Head、Tail、Length、Pointer来实现表头 。存储当前结点的指针时有一定的技巧,Pointer并非存储指向当前结点的指针,而是存储指向它的前趋结点的指针,当其值为null时表示当前结点是第一个结点 。那么为什么要这样做呢?这是因为当删除当前结点后仍需保证剩下的结点构成链表,如果Pointer指向当前结点,则会给操作带来很大困难 。那么如何得到当前结点呢,我们定义了一个方法cursor(),返回值是指向当前结点的指针 。类List还定义了一些方法来实现对链表的基本操作,通过运用这些基本操作我们可以对链表进行各种操作 。例如reset()方法使第一个结点成为当前结点 。insert(Object d)方法在当前结点前插入一个结点,并使其成为当前结点 。remove()方法删除当前结点同时返回其内容 , 并使其后继结点成为当前结点,如果删除的是最后一个结点,则第一个结点变为当前结点 。
链表类List的源代码如下:
import java.io.*;
public class List
{
/*用变量来实现表头*/
private Node Head=null;
private Node Tail=null;
private Node Pointer=null;
private int Length=0;
public void deleteAll()
/*清空整个链表*/
{
Head=null;
Tail=null;
Pointer=null;
Length=0;
}
public void reset()
/*链表复位,使第一个结点成为当前结点*/
{
Pointer=null;
}
public boolean isEmpty()
/*判断链表是否为空*/
{
return(Length==0);
}
public boolean isEnd()
/*判断当前结点是否为最后一个结点*/
{
if(Length==0)
 throw new java.lang.NullPointerException();
else if(Length==1)
 return true;
else
 return(cursor()==Tail);
}
public Object nextNode()
/*返回当前结点的下一个结点的值,并使其成为当前结点*/
{
if(Length==1)
 throw new java.util.NoSuchElementException();
else if(Length==0)
 throw new java.lang.NullPointerException();
else
{
 Node temp=cursor();
 Pointer=temp;
 if(temp!=Tail)
return(temp.next.data);
 else
throw new java.util.NoSuchElementException();
}
}
public Object currentNode()
/*返回当前结点的值*/
{
Node temp=cursor();
return temp.data;
}
public void insert(Object d)
/*在当前结点前插入一个结点,并使其成为当前结点*/
{
Node e=new Node(d);
if(Length==0)
{
 Tail=e;
 Head=e;
}
else
{
 Node temp=cursor();
 e.next=temp;
 if(Pointer==null)
Head=e;
 else
Pointer.next=e;
}
Length++;
}
public int size()
/*返回链表的大小*/
{
return (Length);
}
public Object remove()
/*将当前结点移出链表 , 下一个结点成为当前结点,如果移出的结点是最后一个结点,则第一个结点成为当前结点*/
{
Object temp;
if(Length==0)
 throw new java.util.NoSuchElementException();
else if(Length==1)
{
 temp=Head.data;
 deleteAll();
}
else
{
 Node cur=cursor();
 temp=cur.data;
 if(cur==Head)
Head=cur.next;
 else if(cur==Tail)
 {
Pointer.next=null;
Tail=Pointer;
reset();
 }
 else
Pointer.next=cur.next;
Length--;
}
return temp;
}
private Node cursor()
/*返回当前结点的指针*/
{
if(Head==null)
 throw new java.lang.NullPointerException();
else if(Pointer==null)
 return Head;
else
 return Pointer.next;
}
public static void main(String[] args)
/*链表的简单应用举例*/
{
List a=new List ();
for(int i=1;i=10;i++)
 a.insert(new Integer(i));
 System.out.println(a.currentNode());
 while(!a.isEnd())
System.out.println(a.nextNode());
a.reset();
while(!a.isEnd())
{
 a.remove();
}
a.remove();
a.reset();
if(a.isEmpty())
 System.out.println("There is no Node in List \n");
 System.in.println("You can press return to quit\n");
try
{
 System.in.read();
 //确保用户看清程序运行结果
}
catch(IOException e)
{}
 }
}
class Node
/*构成链表的结点定义*/
{
 Object data;
 Node next;
 Node(Object d)
 {
data=https://www.04ip.com/post/d;
next=null;
 }
}
读者还可以根据实际需要定义新的方法来对链表进行操作 。双向链表可以用类似的方法实现只是结点的类增加了一个指向前趋结点的指针 。
可以用这样的代码来实现:
class Node
{
Object data;
Node next;
Node previous;
Node(Object d)
{
data=https://www.04ip.com/post/d;
next=null;
previous=null;
}
}
当然,双向链表基本操作的实现略有不同 。链表和双向链表的实现方法,也可以用在堆栈和队列的实现中,这里就不再多写了 , 有兴趣的读者可以将List类的代码稍加改动即可 。
希望对你有帮助 。
关于单链表的java代码实现和java中单链表的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读