[数据结构]链表的基本操作
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
相关文章推荐
- 数据结构
- 杨辉三角——队列的应用
- 数据结构的一些基本概念
- 数据结构之二叉树的递归建立和遍历(续)
- 字符串的输入、输出、连接、拷贝、比较
- SDUT2132数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构之简单链表(尾部插入数据)
- 数据结构与算法:C++实现插入排序
- 数据结构与算法:C++实现选择排序
- 深入理解数据结构之链表
- 202Union
- 203MergeList
- 数据结构实验之链表四:有序链表的归并
- 数据结构_线性表_链式存储_单链表 的基本操作
- 第十、十一周数据结构代码
- 数据结构实验之链表三:链表的逆置
- SDUT 3401 数据结构实验之排序四:寻找大富翁 堆排序
- 有理有条地绘制立体图(利用数据结构)
- STL中map、set的数据结构及底层实现
- redis底层数据结构之intset