//实现一个链表的反转,头节点不动
public void reverse(stuNode head) {
stuNode reverseHead = new stuNode(0,"",""); //反转头节点
stuNode cur = head.next; //表示当前节点
stuNode curNext; //当前节点的下一节点
//判断是否空列表
if(head.next == null) {
return;
}
while(cur != null) {
curNext = cur.next;
cur.next = reverseHead.next;
reverseHead.next = cur;
cur = curNext;
}
//拼接
head.next = reverseHead.next;
}
测试
public class StuLinkListDemo {
public static void main(String[] args) {
stuNode stu1 = new stuNode(1,"张三","在线");
stuNode stu2 = new stuNode(2,"李四","离线");
stuNode stu3 = new stuNode(3,"王五","在线");
stuNode stu4 = new stuNode(4,"赵六","在线");
StuLinkList stulist = new StuLinkList();
stulist.addByOrder(stu1);
stulist.addByOrder(stu3);
stulist.addByOrder(stu4);
stulist.addByOrder(stu2);
stulist.list();
//测试反转
System.out.println("反转后");
stulist.reverse(stulist.getHead());;
stulist.list();
}
}
结果如下
实现过程中出现的问题
1.return和break的用法:return用来返回,也可以用来结束方法。而break是用来跳出循环,当要跳出外部循环是,可以使用带标签的break
2.关于new对象和赋值null的区别
stuNode reverseHead = new stuNode(0,"","");
new对象会将reverseHead 指向stuNode 在内存创建的地址
如果是stuNode reverseHead = null;则不会占用内存空间
什么时候用new对象,什么时候用null
加入要进行取值操作,则必须要new
若只是当个辅助变量,用来遍历之类的用null