您的位置:首页 > 理论基础 > 数据结构算法

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

2016-05-06 12:19 465 查看

链表

可以用任意一组存储单元来存储单链表中数据元素(存储单元可以是不连续的),而且,除了存储每个数据元素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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: