• Index

反转单链表

Last updated: ... / Reads: 104 Edit

反转单链表

以下是将单链表反转的Java代码实现:

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode current = head;
        ListNode nextNode;

        while(current != null) {
            nextNode = current.next;
            current.next = prev;
            prev = current;
            current = nextNode;
        }
        return prev;
    }
}

在上述代码中,我们首先定义了一个ListNode类,它表示单链表中的一个节点,包含一个值val和指向下一个节点的指针next。然后,我们定义了一个Solution类,它包含了一个方法reverseList,该方法接受一个ListNode作为参数,并返回反转后的链表头节点。

在reverseList方法中,我们定义了三个指针:prev,current和nextNode。初始时,prev指针为null,current指向链表头节点,nextNode指向current的下一个节点。

在while循环中,我们将current的指针反转指向prev,然后将prev指针更新为current,将current指针更新为nextNode。重复这个过程直到current指针为null。最后,我们返回prev指针,它指向反转后的链表头节点。

要使用这个代码,只需要创建一个链表并将其传递给reverseList方法即可。例如:

ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);

node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = null;

Solution solution = new Solution();
ListNode reversedHead = solution.reverseList(node1);

在这个示例中,我们创建了一个包含5个节点的单链表,并将其传递给reverseList方法。最后,我们得到了反转后的链表头节点reversedHead。

代码注释

以下是反转单链表的Java代码和注释:

class ListNode {
    int val;
    ListNode next;
    ListNode(int val) {
        this.val = val;
    }
}

public class Solution {
    public ListNode reverseList(ListNode head) {
        // 用于存储当前节点的前一个节点
        ListNode prev = null;
        // 用于存储当前节点的下一个节点
        ListNode next = null;
        // 当前节点初始化为头节点
        ListNode curr = head;

        // 遍历链表
        while (curr != null) {
            // 保存当前节点的下一个节点
            next = curr.next;
            // 将当前节点的next指针指向前一个节点
            curr.next = prev;
            // 将prev指针移动到当前节点
            prev = curr;
            // 将curr指针移动到下一个节点
            curr = next;
        }

        // 当curr == null时,prev指向原链表的尾节点,也就是反转后的头节点
        return prev;
    }
}

这段代码中,我们创建了一个名为ListNode的节点类,它包含一个整数值和指向下一个节点的指针。我们还创建了一个名为Solution的类,它包含一个名为reverseList的方法,该方法接收一个链表的头节点作为参数,并返回反转后的链表的头节点。

在reverseList方法中,我们首先初始化prev和next指针为null,并将curr指针初始化为传入的头节点。接着,我们遍历链表,每次迭代时将当前节点的next指针指向prev,然后将prev指针移动到当前节点,将curr指针移动到下一个节点。最后,当curr指针为null时,我们返回prev指针,该指针指向反转后的链表的头节点。


Comments

Make a comment

  • Index