跳至主要內容

反转链表

soulballad算法剑指Offer剑指Offer约 279 字小于 1 分钟

题目:

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。链表的定义如下:

public class ListNode {
    public int value;
    public ListNode next;
}

分析:

​ 要反转链表,需要每个节点的next指向它的前一个节点,下一个节点next指向当前节点。所以需要把当前节点记录下来。当链表遍历到尾节点时,即为反转后的头节点。

代码:

public class ReverseListNode {

    public static ListNode getReversedListNode(ListNode pHaed) {
        // 反转后的头节点
        ListNode reverseHead = null;
        // 当前节点
        ListNode curNode = pHaed;
        // 前一个节点
        ListNode prevNode = null;

        while (curNode != null) {
            // 获取链表中下一个节点
            ListNode nextNode = curNode.next;
            // 如果下一个节点为null,说明到达链表尾部
            if (nextNode == null) {
                reverseHead = curNode;
            }
            // 把当前节点的next指向前一个节点
            curNode.next = prevNode;
            // 当前节点赋值给前一个节点
            prevNode = curNode;
            // 下一个节点赋值给当前节点
            curNode = nextNode;
        }

        return reverseHead;
    }
}
上次编辑于:
贡献者: soulballad