码迷,mamicode.com
首页 > 其他好文 > 详细

[数据结构]链表的基本操作

时间:2016-05-07 07:25:58      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

链表


可以用任意一组存储单元来存储单链表中数据元素(存储单元可以是不连续的),而且,除了存储每个数据元素ai的值以外,还必须存储指示其直接后继元素的信息。这两部分信息组成的数据元素ai的存储映像称为结点。N个结点链在一起被称为链表,当结点只包含其后继结点的信息的链表就被称为单链表。

链表定义如下数据类来存储结点信息:

public class Node {

    Node next = null;
    int data;
    public Node(int data){
        this.data = data;
    }
}
/**
 * 链表的基本操作
 * @author dream
 *
 */
public class MyLinkeList {

    Node head = null;   //链表头的引用

    /**
     * 向链表中插入数据
     * @param d:插入数据的内容
     */
    public void addNode(int d){
        Node newNode = new Node(d); 
        if(head == null){
            head = newNode;
            return;
        }
        Node tmp = head;
        while (tmp.next != null) {
            tmp = tmp.next;
        }
        //add node to end
        tmp.next = newNode;
    }

    /**
     * 
     * @param index:删除第index个结点
     * @return:成功返回true,失败返回false
     */
    public Boolean deleteNode(int index){
        if(index < 1 || index > length()){
            return false;
        }
        //删除链表第一个元素
        if(index == 1){
            head = head.next;
            return true;
        }
        int i = 1;
        Node preNode = head;
        Node curNode = preNode.next;
        while (curNode != null) {
            if(i == index){
                preNode.next = curNode.next;
                return true;
            }
            preNode = curNode;
            curNode = preNode.next;
            i++;
        }
        return true;
    }


    /**
     * 
     * @return 返回结点的长度
     */
    public int length(){
        int length = 0;
        Node tmp = head;
        while (tmp != null) {
            length++;
            tmp = tmp.next;
        }
        return length;
    }

    /**
     * 对链表进行排序
     * @return  返回排序后的头结点
     */
    public Node orderList(){
        Node nextNode = null;
        int temp = 0;
        Node curNode = head;
        while (curNode.next != null) {
            nextNode = curNode.next;
            while (nextNode != null) {
                if(curNode.data > nextNode.data){
                    temp = curNode.data;
                    curNode.data = nextNode.data;
                    nextNode.data = temp;
                }
                nextNode = nextNode.next;
            }
            curNode = curNode.next;
        }
        return head;
    }

    /**
     * 打印结点值
     */
    public void printList(){
        Node tmp = head;
        while (tmp != null) {
            System.out.println(tmp.data);
            tmp = tmp.next;
        }
    }


    public static void main(String[] args) {
        MyLinkeList list = new MyLinkeList();
        list.addNode(5);
        list.addNode(3);
        list.addNode(1);
        list.addNode(3);
        System.out.println("listLen=" + list.length());
        System.out.println("before order:");
        list.printList();
        list.orderList();
        System.out.println("after order:");
        list.printList();
    }
}

Github源码地址:

https://github.com/GeniusVJR/Algorithm-and-Data-Structure/tree/master/LinkedList

[数据结构]链表的基本操作

标签:

原文地址:http://blog.csdn.net/codeemperor/article/details/51330599

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!