您的位置:首页 > 其它

链表demo002

2014-09-09 20:55 197 查看
   给定(已生成)一个带表头结点的单链表,设head为头指针,结点的结构为(data,next),data为整型元素,next为指针,试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间。(要求:不允许使用数组作辅助空间)

package datastructure;

/**
* 给定(已生成)一个带表头结点的单链表,设head为头指针,结点的结构为(data,next),data为整型元素,next为指针,试写出算法:
* 按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间。(要求;不允许使用数组作辅助空间)
*
* @author gejing
*
*/
public class Demo002 {

public static void main(String[] args) {

// 构造一个单向链表
Node head = new Node();
Node temp;
Node currentNode = head;
for (int i = 0; i < 10; i++) {
temp = new Node((int) (Math.random() * 100));
currentNode.next = temp;
currentNode = currentNode.next;
}
// 显示链表内容
show(head);
Demo002 demo002 = new Demo002();
System.out.println("按从小到大输出");
while (head.next != null) {
demo002.findMin(head);
show(head);
}

}

/**
* print the linklist
*/

public static void show(Node head) {
Node currentNode = head.next;
if (currentNode == null) {
System.out.println("链表为空(没有删除头结点)");
}
while (currentNode != null) {
System.out.print(currentNode.data + " ");
currentNode = currentNode.next;
}
System.out.println();
}

/**
* 找出当前链表的最小数据结点,输出其数据并删除该结点
*/
public void findMin(Node head) {

Node currentNode = head.next;// 当前工作结点
Node currentPre = head;// 当前结点的直接前驱
Node minNodePre = null;// 记录最小结点的直接前驱
if (currentNode == null) {
System.out.println("The linklist is empty");
return;
}
int min = Integer.MAX_VALUE;
while (currentNode != null) {
if (currentNode.data <= min) {
minNodePre = currentPre;
min = currentNode.data;
}
currentPre = currentPre.next;
currentNode = currentNode.next;
}

System.out.println("min: " + min + " 并删除该结点");
// 删除最小结点
minNodePre.next = minNodePre.next.next;
System.gc();
}

}


(使用p.next.data可以少声明一个变量)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: