JAVA 实现单链表


 1 public class LinkNode {
2 public String data;
3 public LinkNode next;
4
5 LinkNode(){
6 this.data = "a";
7 this.next = null;
8 }
9
10 LinkNode(String string){
11 this.data = string;
12 this.next = null;
13 }
14 }


  1 public class LinkList {
2
3 public LinkNode head = null;//头指针
4 private LinkNode currentNode = null;//遍历用节点
5
6 LinkList(){}
7 LinkList(int n){
8 for(int i = 0; i<n; i++){
9 add();
10 }
11 }
12
13 public int getLength(){
14 if(head == null){
15 return 0;
16 }
17 else{
18 currentNode = head;
19 int count = 0;
20 while(currentNode != null){
21 currentNode = currentNode.next;
22 count++;
23 }
24 return count;
25 }
26 }
27
28 //头插法添加节点
29 public void add(){
30 LinkNode tempNode = new LinkNode();
31 tempNode.next = head;
32 head= tempNode;
33 }
34
35 //在第i个节点之后插入新节点
36 public void insert(int i,String string){
37 if(getLength() >= i){
38 LinkNode tempNode = new LinkNode(string);
39 if(i == 0){ //头指针后插入节点
40 tempNode.next = head;
41 head = tempNode;
42 }
43 else{
44 currentNode = head;
45 if(i == 1){ //第一个节点后插入
46 tempNode.next = currentNode.next;
47 currentNode.next = tempNode;
48 }
49 else{ //一般位置插入
50 for(int j =0; j < (i-1); j++){
51 currentNode = currentNode.next;
52 }
53 tempNode.next = currentNode.next;
54 currentNode.next = tempNode;
55 }
56 }
57 }
58 else{
59 System.out.println("要插入的位置不存在");
60 }
61 }
62
63 //删除第i个节点
64 public void delete(int i){
65 if((getLength()>=i) && (i>0)){
66 currentNode = head;
67 if(i == 1){
68 head = currentNode.next;
69 }
70 else{
71 for(int j = 1; j<(i-1); j++){
72 currentNode = currentNode.next;
73 }
74 LinkNode tempNode = currentNode.next;
75 currentNode.next = tempNode.next;
76 }
77 }
78 else{
79 System.out.println("这个节点不存在");
80 }
81 }
82
83 //修改第i个节点
84 public void modify(int i,String string){
85 if(getLength()>=i && (i>0)){
86 currentNode = head;
87 for(int j = 1; j<i; j++){
88 currentNode = currentNode.next;
89 }
90 currentNode.data = string;
91 }
92 else{
93 System.out.println("这个节点不存在");
94 }
95 }
96
97 //查询第i个节点
98 public String search(int i){
99 if(getLength()>=i && (i>0)){
100 currentNode = head;
101 for(int j = 1; j<i; j++){
102 currentNode = currentNode.next;
103 }
104 return currentNode.data;
105 }
106 else{
107 System.out.println("这个节点不存在");
108 return null;
109 }
110 }
111
112 public void display(){
113 currentNode = head;
114 while(currentNode != null){
115 System.out.println(currentNode.data.toString());
116 currentNode = currentNode.next;
117 }
118 }
119
120 public static void main(String args[]){
121 //测试代码
122 /*LinkList ll = new LinkList(4);
123 ll.insert(4, "n");
124 ll.display();
125 System.out.println(ll.getLength());
126 ll.delete(5);
127 ll.display();
128 ll.insert(4, "v");
129 System.out.println(ll.search(5));*/
130 }
131 }

JAVA 实现单链表

时间: 2024-10-07 18:34:02

JAVA 实现单链表的相关文章

java实现单链表

前面已经介绍了java如何实现顺序链表:http://www.cnblogs.com/lixiaolun/p/4643664.html 接下来,我们开始学习java实现单链表. 单链表类 package linklist; public class LinkList { class Element { public Object value=null; private Element next=null; } private Element header = null;//头结点 /** * 初

java 实现单链表的逆序

</pre><pre name="code" class="java">package com.ckw.mianshi; /** * java 实现单链表的逆序 * @author Administrator * */ public class SingleLinkedReverse { class Node{ int data; Node next; public Node(int data){ this.data = data; } }

Java 实现单链表反序

//单链表反序 public class SingleLinkedListReverse { public static void main(String[] args) { Node head = new Node(0); Node temp = null; Node cur = null; for (int i = 1; i <= 10; i++) { temp = new Node(i); if (i == 1) { head.setNext(temp); } else { cur.set

数据结构复习--java实现单链表基本操作

单链表的基本操作包括建立单链表.查找运算(按序查找和按值查找).插入运算(前插和后插)和删除运算.下面给出具体的java实现程序: package com.zpp.test; //首先创建一个节点类 public class Node { private Node next; //指针域 private int data;//数据域 public Node( int data) { this. data = data; } } package com.zpp.test; public class

用java实现单链表

对于一个单链表来说,要求有最基本的数据节点以及一些重要的方法. 方法应该有增删改查.定位.输出.获取链表长度.排序.链表读入.链表输出.下面是我用java写的单链表 public class List { public class Node{//定义节点 public int data; public Node next; public Node(int data){ this.data = data; } } private Node head;//头节点 public Node getHea

用Java实现单链表的基本操作

笔试题中经常遇到单链表的考题,下面用java总结一下单链表的基本操作,包括添加删除节点,以及链表转置. package mars; //单链表添加,删除节点 public class ListNode { private Node head; public ListNode(){ head=null; } //在链表前添加节点 public void addpre(int dvalue){ Node n=new Node(dvalue); if(head==null){ head=n; }els

Java实现单链表翻转

单链表翻转比如有如下链表: 需要按照C B A 输出,我们可以有好几种方法: package org.andy.test; import java.util.ArrayList; import java.util.List; /** * @author andy * @version:2015-2-4 上午9:41:12 * * */ public class LinkedReverse { /** * @param args */ public static void main(String[

Java实现单链表的快速排序和归并排序

本文描述了LeetCode 148题 sort-list 的解法. 题目描述如下: Sort a linked list in O(n log n) time using constant space complexity. 题目要求我们在O(n log n)时间复杂度下完成对单链表的排序,我们知道平均时间复杂度为O(n log n)的排序方法有快速排序.归并排序和堆排序.而一般是用数组来实现二叉堆,当然可以用二叉树来实现,但是这么做太麻烦,还得花费额外的空间构建二叉树,于是不采用堆排序. 故本

(java实现)单链表

什么是单链表 在了解单链表之前,你知道什么是链表吗?如果你不知道什么是链表,可以看看我的这篇博客<链表-LinkList> 单链表是链表的其中一种基本结构.一个最简单的结点结构如图所示,它是构成单链表的基本结点结构.在结点中数据域用来存储数据元素,指针域用于指向下一个具有相同结构的结点. 因为只有一个指针结点,称为单链表. 单链表中三个概念需要区分清楚:分别是头指针,头节点和首元节点. 头结点.头指针和首元结点(此段转自@ciyeer大牛的博客) 头结点:有时,在链表的第一个结点之前会额外增设