算法——单链表节点的删除和插入

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;
    }
}

猜你喜欢

转载自blog.csdn.net/xjz19930319/article/details/93050740