目录
1 题目描述
输入一个链表,例如:12 -> 23 -> 34 -> 45 -> 56 -> null 输出:56 -> 45 -> 34 -> 23 -> 12 -> null,反转后输出新链表的表头,例如:
2 解题思路
首先我们拿到一个单链表,假设它不为空,且至少有2个结点,此时我们设想反转第二个结点的指向,因此我们需要记住反转前前驱位置的结点,并记该前驱结点为prev,记需要反转的结点为cur,将cur结点指向prev结点;但是要将单链表遍历完,cur需要向后走,所以我们再定义一个curNext结点,为cur结点的后继结点,当cur结点指向curNext结点为null时,单链表遍历完毕。当一个结点进行反转时的代码为图中核心步骤。
考虑遍历的出口,当cur == null的时候就不需要再进行反转了;并且考虑到所有的特殊情况。
3 代码实现
//反转一个单链表
public Node reverLinked(){
Node prev = null;//保存前驱信息
Node cur = this.head;//需要反转的节点
Node reverHead = null;//反转后的新的头节点
while (cur != null){
Node curNext = cur.next;//保存后继信息
if (curNext == null){
reverHead = cur;//将最后一个节点赋值成新的头节点
}
cur.next = prev;
prev = cur;
cur = curNext;
}
return reverHead;
}