ホームページ >Java >&#&チュートリアル >Java リンク リストの基本操作 (追加、削除、確認、変更) を実装する方法
リンク リストも線形データ構造であり、配列とは異なり、メモリにランダムに格納されます。
次は、リンク リストの 4 つの操作を網羅した完全な例です。注意すべき点がいくつかあります:
(1) 追加、削除、変更、確認する前に、次のことが必要です。境界判定のために次のマークをチェックします;
(2) last という名前のノードを追加すると、リンクされたリストの最後での操作が容易になり、最後のノードを見つけるための時間の複雑さがなくなります;
(3) リンクリストに要素を挿入するときは、まず挿入する前のノードの prevNode を見つけ、次に prevNode の next を記録します。挿入するときは、まず prevNode の next が挿入するノードを指すようにし、次に prevNode を記録します。挿入されるノードの次を指します。 next は現在の次のノードを指します。これは C の操作とは少し異なります;
(4) ノードを削除するときは、removedNode を使用して削除したノードの戻り値を記録し、サイズを 1 減らすことを忘れないでください。
おすすめの関連無料ビデオ チュートリアル: java 無料ビデオ チュートリアル
操作例は次のとおりです:
public class MyLinkedList { //定义一个静态的内部类 private static class Node{ int data; Node next; Node(int data){ this.data = data; } } private Node head; private Node last;//为了方便尾部插入元素的操作 private int size;//size表示链表的实际长度 public void insert(int data, int index)throws Exception{ if(index < 0 || index > size) throw new IndexOutOfBoundsException("超出链表节点范围!"); Node insertedNode = new Node(data); if(size == 0){//插入第一个元素时元素个数为0 head = insertedNode; last = insertedNode; }else if(size == index){//在链表的末尾插入 last.next = insertedNode; last = insertedNode; }else{ Node prevNode = get(index - 1); Node nextNode = prevNode.next; prevNode.next = insertedNode; insertedNode.next = nextNode; } size++; } public void update(int data, int index) throws Exception{ if(index < 0 || index >= size) throw new IndexOutOfBoundsException("超出链表节点范围!"); if(index == 0) head.data = data; else if(index == size - 1) last.data = data; else{ Node temp = get(index); temp.data = data; } } public Node remove(int index) throws Exception { if(index < 0 || index >= size){ throw new IndexOutOfBoundsException("超出链表节点范围!"); } Node removedNode = null;//不给removedNode分配堆内存 if(index == 0){ removedNode = head; head = head.next; } else if(index == size - 1){ //删除尾结点 Node prevNode = get(index - 1); removedNode = prevNode.next; prevNode.next = null; last = prevNode; } else{ Node prevNode = get(index - 1); Node nextNode = prevNode.next.next; removedNode = prevNode.next; prevNode.next = nextNode; } size--; return removedNode; } //查找链表元素 public Node get(int index) throws Exception{ if(index < 0 || index >= size){ throw new IndexOutOfBoundsException("超出链表节点范围!"); } Node temp = head; for(int i = 0; i < index; i++){ temp = temp.next; } // size--; return temp; } //输出链表 public void output(){ Node temp = head; while(temp != null){ System.out.println(temp.data); temp = temp.next; } } public static void main(String[] args) throws Exception{ MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.insert(3,0); myLinkedList.insert(7,1); myLinkedList.insert(9,2); myLinkedList.insert(5,3); myLinkedList.insert(6,1); myLinkedList.remove(0); myLinkedList.update(2,1); myLinkedList.output(); System.out.println(myLinkedList.size); } }
さらに関連するチュートリアルを知りたい場合は、 javaDevelopment Introduction
以上がJava リンク リストの基本操作 (追加、削除、確認、変更) を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。