package com.demo.calculate; import android.app.Activity; import android.os.Bundle; import android.view.View; import com.demo.calculate.bean.LinkedList; public class LinkArrayActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chain); findViewById(R.id.btn_createSingleChain).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LinkedList linkedList = new LinkedList(); linkedList.insertNode(0,2); linkedList.insertNode(1,3); linkedList.insertNode(2,4); linkedList.insertNode(1,6); linkedList.insertNode(4,7); linkedList.removeNode(5); linkedList.show(); } }); } }
package com.demo.calculate.bean; import android.util.Log; /** * 如果插入和删除节点的时候需要找到 * * @author xjz */ public class LinkedList { private Node head; private Node last; private int size; /** * @param index */ //插入节点 public void insertNode(int index, int data) { if (index < 0 || index > size) { throw new IndexOutOfBoundsException("超出链表节点范围!"); } //要插入的节点 Node insertNode = new Node(data); //插入的是空链表 if (size == 0) { head = insertNode; last = insertNode; } else if (index == 0) { //插入头部 insertNode.next = head; head = insertNode; } else if (index == size) { //插入尾部 last.next = insertNode; last = insertNode; } else { //插入中间节点 Node prevNode = get(index - 1); insertNode.next = prevNode.next; prevNode.next = insertNode; } size++; } /** * 移除某个节点 * * @param index * @return */ public Node removeNode(int index) { if (index < 0 || index > size) { throw new IndexOutOfBoundsException("超出链表节点范围"); } Node removeNode = null; //移除头节点 if (index == 0) { removeNode = head; head = head.next; } else if (index == size) { //移除尾节点 Node prevNode = get(index - 1); removeNode = prevNode.next; prevNode.next = null; last = prevNode; } else { //删除中间的节点 Node prevNode = get(index - 1); removeNode = prevNode.next; prevNode.next = prevNode.next.next; } size--; return removeNode; } /** * 显示所有的节点信息 */ public void show() { Node currentNode = head; while (true) { if (currentNode == null) { break; } Log.i("tag", currentNode.data + "=====data======"); currentNode = currentNode.next; } } private Node get(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("超出链表节点范围!"); } Node temp = head; for (int i = 0; i < index; i++) { temp = temp.next; } return temp; } } class Node { int data; Node next; public Node(int data) { this.data = data; } }