《剑指offer》面试题24:输入一个链表,反转链表后,输出新链表的表头。
思路:反转链表就是将链表中每一个节点的next指针域指向它的前一个节点,而当next指针域指向前一个节点之后,它的后一个节点就找不到了,所有在改变指向前需要先记录它的后一个节点。新链表的表头就是原链表的表尾。
代码如下:
public ListNode reverseList(ListNode head) {
ListNode reverseHead = null;
ListNode curNode = head;
ListNode preNode = null;
while (curNode != null) {
// 记录当前节点的下一个节点
ListNode nextNode = curNode.next;
// 当前节点的下一个节点为空则当前节点为新链表的表头
if (nextNode == null) {
reverseHead = curNode;
}
curNode.next = preNode;
preNode = curNode;
curNode = nextNode;
}
return reverseHead;
}