經典面試題: java實現單鏈表翻轉
阿新 • • 發佈:2020-12-14
經典面試題: java實現單鏈表翻轉
思路分析:
單鏈表的翻轉,我們抽象來看,其實就是將每個節點的next 指向他的前一個節點,那麼我們從第一個節點開始翻轉,將第一個節點的next指向null,把第二個節點的next 指向第一個節點,第三個節點的next指向 第二個節點。。。。。
這裡需要使用三個輔助節點: pre :翻轉節點的前一個節點,cur: 當前需要翻轉的節點,next:翻轉節點的下個節點
public class ListReverse {
public ListNode reverseList(ListNode head) {
//初始化pre為null,讓第一個節點首先指向null
ListNode pre = null;
//cur就是我們當前需要翻轉的節點,將該節點的next指向他的前一個節點
ListNode cur = head;
while (cur !=null){
//需要先將當前的節點的next拿到,否則我們直接翻轉的話
//就讓後面的節點斷開練習了
ListNode next = cur.next;
//進行翻轉
cur.next = pre;
//上面的步驟指向完,一個節點翻轉完成,我們需要為
//下一次的翻轉做準備,將pre指向往後移一位
pre = cur;
//讓cur指向next,下一次就要翻轉你了
cur = next;
}
return pre;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
圖解; 第一個行是第一次 翻轉,第二行是第二次翻轉。
val = x;
}
}
圖解; 第一個行是第一次 翻轉,第二行是第二次翻轉。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201213141954298.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzgzNjIwNA==,size_16,color_FFFFFF,t_70)