黑马程序员技术交流社区
标题:
链表逆序的问题
[打印本页]
作者:
周峻
时间:
2012-3-17 12:48
标题:
链表逆序的问题
链表的 LinkNode 类中逆序reverse()函数, 改了以后不能实现(改的内容见函数注释)???
class Node{
private String name;
private Node next;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Node() {}
public Node(String name){
this.name=name;
}
public Node(String name, Node next) {
this.name = name;
this.next = next;
}
}
class LinkNode{
private Node head;
private Node tail;
public Node getHead() {
return head;
}
public void setHead(Node head) {
this.head = head;
}
public LinkNode(){}
public void add(String name){ //尾差法建立链表
Node node=new Node(name);
if(head==null){
head=tail=node;
}
else{
tail.setNext(node);
tail=node;
}
}
public void print(){
Node node=head;
while(node!=null){
System.out.print(node.getName()+" ");
node=node.getNext();
}
}
public void reverse(){
Node node=head.getNext();
Node temp;
head.setNext(null);
while(node!=null){ //此循环改如下不能运行为什么,
temp=node.getNext(); //temp=node;
node.setNext(head); //
head=node; //
node=temp; //node=temp.getNext();
}
}
}
class Test{
public static void main(String[] args){
LinkNode l=new LinkNode();
l.add("1");
l.add("2");
l.add("3");
l.add("4");
l.add("5");
l.add("6");
l.print();
System.out.println("\n"+"逆序后------------------");
l.reverse();
l.print();
}
}
作者:
李飞
时间:
2012-3-17 13:10
链表每一个元素都是有前指针,元素本身,后指针三部分组成的。就是这个原因所以它增删方便
例如:
a,b,c,d,e五个元素
前指针用qian表示
后指针用hou表示
在链表结果中的实际效果是(本想画图的,画不好)
null,a,hou——>qian,b,hou——>qian,c,hou——>qian,d,hou——>qian,e,null
这个时候逆转就是
1.将e的后指针指向d的前指针,e没有前指针
2.将d的后指针指向c的前指针
3.将c的后指针指向b的前指针
4.将b的后指针指向a的前指针,a没有后指针
想具体了解,可以看数据结构这本书
第一种方法可以用循环方式来做。
第二种就是用链表集合特有的方法,每次取最后一个
作者:
段浩亮
时间:
2012-3-17 13:47
本帖最后由 段浩亮 于 2012-3-17 13:55 编辑
22.png
(30.3 KB, 下载次数: 51)
下载附件
2012-3-17 13:48 上传
修改后执行玩一次循环链表中就只剩下两个元素了,后面所有元素都丢失了,因为没有元素指向他们了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2