鏈表是類似一種數據結構的東西,就是分別存放有地址以及數據單項鏈表一般是上一個存放地址的地方存放下一個節點的地址,而雙向的就是有兩個存放地址的地方,分別存上一個以及下一個的地址。大概是這樣子
成都創新互聯專注于壽陽企業網站建設,成都響應式網站建設公司,電子商務商城網站建設。壽陽網站建設公司,為壽陽等地區提供建站服務。全流程按需定制制作,專業設計,全程項目跟蹤,成都創新互聯專業和態度為您提供的服務
代碼:
//?刪除下標為index的節點
public?void?remove(int?index)?{
if?(index?=?modCount)?{
//?拋異常
System.out.println("indexOutOfBoundsException!");//?最好自定義異常拋出,這里演示
return;
}
Node?node?=?head;
//?如果節點為第一個節點
if?(index?==?0)?{
head?=?head.next;?//?將頭節點指向第二個節點
modCount--;
return;
}
//?如果節點為最后一個節點,找到最后一個節點的前一個節點,不用管
if?(index?==?modCount?-?1)?{
System.out.println("ddd");
//?找到最后一個節點的前一個節點
int?j?=?0;
while?(node?!=?null??j??index?-?1)?{
//?最后一個節點的前一個節點
node?=?node.next;
j++;
}
last?=?node;?//?最后一個節點設置為前一個節點
modCount--;
return;
}
//?如果節點為中間節點
int?j?=?0;
while?(node?!=?null??j??index?-?1)?{
//?查找被刪除的節點的前一個節點
node?=?node.next;
j++;
}
node.next?=?node.next.next;?//?被刪除節點的下一個節點設置為被刪除節點的下下個節點
modCount--;
}
java.util.Linkedlist是雙向鏈表,當然也就包括了單鏈表的功能,你可以去看他怎么寫的啊
public class SingleLinkedListE {
private EntryE first, last;
private int size = 0;
public void add(E element) {
EntryE newEntry = new EntryE(element, null);
if (first == null) {
first = last = newEntry;
} else {
last.next = newEntry;
last = newEntry;
}
++size;
}
public E get(int index) {
if (index 0 || index = size)
throw new IndexOutOfBoundsException("Index: "+index+
", Size: "+size);
EntryE e = first;
for (int i = 0; i index; ++i)
e = e.next;
return e.data;
}
private static class EntryE {
Entry(E data, EntryE next) {
this.data = data;
this.next = next;
}
E data;
EntryE next;
}
}
這是我寫的一個差不多,你看一下吧:
package com.test.list;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class LinkedList {
public static void main(String[] args) {
MyList l = new MyList();
MyListNode node = l.createList();
l.printNode(node);
//l.searchNode(node, 4);
//node = l.insertNode(node, 3, "g");
//l.printNode(node);
node = l.deleteNode(node, "d");
l.printNode(node);
}
}
class MyListNode {
public String data;
public MyListNode nextNode;
}
class MyList {
public MyListNode createList() {
MyListNode node = new MyListNode();
MyListNode q ,p;
q = new MyListNode();
q = node;
while (true) {
String s = null;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("請輸入節點數據:");
s = br.readLine();
if (s.equals("0")) {
break;
} else {
p = new MyListNode();
p.data = s;
p.nextNode = null;
q.nextNode = p;
q = p;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return node;
}
public void printNode(MyListNode node) {
MyListNode p = node.nextNode;
while (p!= null) {
System.out.print(" "+p.data);
p = p.nextNode;
}
}
public void searchNode(MyListNode node, int i){
MyListNode p = node.nextNode;
int j = 1;
while (p != null ji) {
p = p.nextNode;
j++;
}
if( p == null || ji) {
System.out.println("error");
}
System.out.println(" --"+p.data+"--");
}
public MyListNode insertNode(MyListNode node, int i ,String s) {
MyListNode p = node.nextNode;
int j = 1;
while (p != null ji-1) {
p = p.nextNode;
j++;
}
if( p == null || ji-1) {
System.out.println("error");
}
MyListNode n = new MyListNode();
n.data = s;
n.nextNode = p.nextNode;
p.nextNode = n;
return node;
}
public MyListNode deleteNode(MyListNode node ,String s) {
MyListNode p = node;
while(p.nextNode != null !p.nextNode.data.equals(s)) {
p = p.nextNode;
}
p.nextNode = p.nextNode.nextNode;
return node;
}
}
/*逆位序創建
public MyListNode createList() {
MyListNode node = new MyListNode();
node.nextNode = null;
while(true) {
String s = null;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("請輸入節點數據:");
s = br.readLine();
if(s.equals("0")) {
break;
}else {
MyListNode n = new MyListNode();
n.data = s;
n.nextNode = node.nextNode;
node.nextNode = n;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return node;
}
*/
你可能對鏈表的數據結構并不是很清楚?給你個寫示例代碼理解下,最好打個斷點每一步跟蹤理解一下
//class?ListNode?{
//????int?val;
//????jdb.ListNode?next;
//????ListNode(int?x)?{?val?=?x;?}
//}
public?class?Main?{
public?static?void?main(String[]?args)?throws?Exception?{
//現在有一個鏈表1-2-3
ListNode?listNode?=?new?ListNode(1);
listNode.next?=?new?ListNode(2);
listNode.next.next?=?new?ListNode(3);
listNode.next.next.next?=?new?ListNode(4);
//我們來打印一下
printListNode(listNode);
//我現在要在2后面插入9
boolean?flag?=?insertVal(listNode,?3,?9);
System.out.println("是否插入成功:"+flag);
//再來打印一下
printListNode(listNode);
}
/**
*
*?@param?listNode//原鏈表
*?@param?pre//插入前的位置
*?@param?val//插入的值
*/
public?static?boolean?insertVal(ListNode?listNode,Integer?pre,?Integer?val)?{
boolean?rs?=?false;
//找插入前的位置
while?(listNode?!=?null??listNode.val?!=?pre)?{
listNode?=?listNode.next;
}
if?(listNode?!=?null?listNode.val==pre)?{
//找到啦
//先把原鏈表后的數據保存起來?這邊就是3-4
ListNode?temp?=?listNode.next;
//把要插入的值連上,再把原來保存的值連上
listNode.next?=?new?ListNode(val);
listNode.next.next?=?temp;
//上面代碼中?listNode的值是2,listNode.next的值是9,listNode.next.next的值就是剛才保存的臨時鏈表3-4
//插入成功標記一下哦
rs=true;
}
return?rs;
}
/**
*?打印呀
*?@param?listNode
*/
public?static?void?printListNode(ListNode?listNode)?{
if?(listNode?!=?null)?{
ListNode?temp?=?listNode;
while?(temp?!=?null)?{
System.out.println(temp.val);
temp?=?temp.next;
}
}
System.out.println("-------------");
}
}
當前題目:java單向鏈代碼 java單向鏈表和雙向鏈表區別
網頁路徑:http://m.kartarina.com/article16/dodspdg.html
成都網站建設公司_創新互聯,為您提供自適應網站、企業建站、做網站、Google、網站設計公司、App設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯