实现一个 链表 有序插入新节点
2012-11-08 00:52
435 查看
简述:
用Java实现一个链表,每次插入后都会进行插入排序,找到合适的位置,维护有序性
注意:
在新加入节点newNode(E v)函数实现时,
1)要判断,pHead是否为空,
2)要先和第一个头结点比较,如果比头结点还小,就插在头结点前面,同时更改头结点指针,
3)链表遍历的时候,一定不能忘记是用currentNode.next == null为结束条件的
4)遍历另外一个约束条件是,插入的节点要大于当前遍历到的节点,同时又要小于之后的那个节点,为了方便插入要保留前一个节点的指针,这样才能顺利插入,不然如果是保留后面一个节点的指针,就没法插入了
代码:
输出:
用Java实现一个链表,每次插入后都会进行插入排序,找到合适的位置,维护有序性
注意:
在新加入节点newNode(E v)函数实现时,
1)要判断,pHead是否为空,
2)要先和第一个头结点比较,如果比头结点还小,就插在头结点前面,同时更改头结点指针,
3)链表遍历的时候,一定不能忘记是用currentNode.next == null为结束条件的
4)遍历另外一个约束条件是,插入的节点要大于当前遍历到的节点,同时又要小于之后的那个节点,为了方便插入要保留前一个节点的指针,这样才能顺利插入,不然如果是保留后面一个节点的指针,就没法插入了
代码:
package data_structure; class Node<E extends Comparable<E>>{ Node(){} Node(E v){ value = v; } E value; Node<E> next; } public class SortedLinkedList<E extends Comparable<E>> { Node<E> pHead; SortedLinkedList(){ pHead = null; } void newNode(E v){ if(pHead == null) pHead = new Node<E>(v); else{ if(v.compareTo(pHead.value) < 0){ Node<E> newNode = new Node<E>(pHead.value); newNode.next = pHead.next; pHead.next = newNode; pHead.value = v; return; } Node<E> currentNode = pHead; while(currentNode.next != null && v.compareTo(currentNode.next.value) > 0){ currentNode = currentNode.next; } Node<E> newNode = new Node<E>(v); newNode.next = currentNode.next; currentNode.next = newNode; } } void Output(){ if(pHead != null){ Node<E> currentNode = pHead; while(currentNode != null){ System.out.print(currentNode.value + ", "); currentNode = currentNode.next; } } } public static void main(String[] args) { SortedLinkedList<Integer> list = new SortedLinkedList<Integer>(); list.newNode(3); list.newNode(2); list.newNode(6); list.newNode(4); list.newNode(1); list.Output(); } }
输出:
相关文章推荐
- 单向链表之有序插入节点(C语言实现)
- 设计一个整型链表类list,能够实现链表节点的插入、删除、以及链表数据的输出操作。
- 向循环有序链表内插入一个节点
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 将一个值插入到有序的单链表,实现插入、删除、输出等基本操作
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- 实现双向链表删除一个节点P,在节点P后插入一个节点
- 编写算法实现建立一个带头结点的含n个元素的双向循环链表H,并在链表H中的第i个位置插入一个元素e
- 两种方法实现:输入一个链表,从尾到头打印链表每个节点的值
- java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head
- 单向链表中,如何在给定节点前快速插入一个节点?
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- 【C与指针】有序单链表插入节点
- c语言:顺序表的实现(三)将元素e插入到一个递减有序表中,不改变顺序表的递减有序性。
- [华为机试练习题]49.向升序单向链表中插入一个节点
- 用头插、尾插、按顺序插入创建一个不带头节点的链表
- 向头指针为 L的有序单链表(从小到大有序)中插入一个结点,使插入后链表仍然有序
- 编程实现单链表和双链表的插入节点
- 编写一个程序,实现删除链表中倒数第k个节点(用单链表实现)
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)