1、定义链表节点对象
public class ListNode {
int val;//定义值
ListNode next=null;//定义下一引用节点
ListNode(int val){
this.val=val;
}
}
2、反转方法及测试
public class ListNodeDone {
public ListNode reverse(ListNode node){
ListNode next=null;//临时变量 用于下次循环
ListNode tail=null;//链表尾巴
while(null!=node){
next=node.next; // 1定义临时变量 为什么不在最后一步 直接 node =node.next 此时 node.next 在步骤2 已经变化
node.next=tail;//2将当前节点 指向尾巴对象 倒序嘛 这一步 是每次循环连接节点的操作
tail=node;// 3然后尾巴 重新赋值 取当前节点 作为新的尾巴
node=next;//4
/*1 和 4 用于保证while循环 一直 往下一个节点循环*/
/*2 和3
*
* 1.next->null 此时 尾巴为空 1指向null后 1 作为新的尾巴 节点1
*
* 2.next->1 此时 尾巴为1 2指向1后 2 作为新的尾巴 节点2 ->节点1
*
*
* 类推 节点5->4>3>2>1
* */
}
return tail;
}
public static void main(String[] args) {
//新建节点
ListNode a=new ListNode(1);
ListNode b=new ListNode(2);
ListNode c=new ListNode(3);
ListNode d=new ListNode(4);
ListNode e=new ListNode(5);
ListNode f=new ListNode(6);
//连接节点
a.next=b;
b.next=c;
c.next=d;
d.next=e;
e.next=f;
System.out.println("*************************************************");
new ListNodeDone().reverse(a);
while(f!=null){
System.out.print(f.val+"->");
f= f.next;
}
}
}
网友评论