反转链表

《剑指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;
}

你可能感兴趣的:(反转链表)