1顿膨、定義鏈表節(jié)點對象
public class ListNode {
? ? ? ? int val;//定義值
? ? ? ? ListNode? next=null;//定義下一引用節(jié)點
? ? ? ? ListNode(int val){
? ? ? ? ? ? ? this.val=val;
? ? ? ? ?}
}
2、反轉(zhuǎn)方法及測試
public class ListNodeDone {
? ? public ListNode reverse(ListNode node){
? ? ? ? ListNode next=null;//臨時變量 用于下次循環(huán)
? ? ? ? ListNode tail=null;//鏈表尾巴
? ? ? ? while(null!=node){
? ? ? ? ? ? next=node.next; // 1定義臨時變量? 為什么不在最后一步 直接 node =node.next? 此時 node.next 在步驟2 已經(jīng)變化
? ? ? ? ? ? node.next=tail;//2將當(dāng)前節(jié)點 指向尾巴對象? 倒序嘛? 這一步 是每次循環(huán)連接節(jié)點的操作
? ? ? ? ? ? tail=node;// 3然后尾巴 重新賦值? 取當(dāng)前節(jié)點 作為新的尾巴
? ? ? ? ? ? node=next;//4
? ? ? ? ? ? /*1 和 4? 用于保證while循環(huán) 一直 往下一個節(jié)點循環(huán)*/
? ? ? ? ? ? /*2 和3
? ? ? ? ? ? *
? ? ? ? ? ? * 1.next->null 此時? 尾巴為空? 1指向null后? 1 作為新的尾巴? 節(jié)點1
? ? ? ? ? ? *
? ? ? ? ? ? * 2.next->1? 此時? 尾巴為1? 2指向1后? 2 作為新的尾巴? ? 節(jié)點2 ->節(jié)點1
? ? ? ? ? ? *
? ? ? ? ? ? *
? ? ? ? ? ? *? 類推? 節(jié)點5->4>3>2>1
? ? ? ? ? ? * */
? ? ? ? }
? ? ? ? return tail;
? ? }
? ? public static void main(String[] args) {
? ? ? ? //新建節(jié)點
? ? ? ? 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);
? ? ? ? //連接節(jié)點
? ? ? ? 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;
? ? ? ? }
? ? }
}