欢迎访问宙启技术站
智能推送

如何在Java中使用函数来实现链表的反转?

发布时间:2023-07-07 21:14:16

链表的反转是一个常见的编程问题。在Java中,可以使用函数来实现链表的反转。下面是一个使用函数实现链表反转的示例代码,总共1000字左右。

1. 首先,定义一个 链表节点类(ListNode)来表示链表的节点。节点包含一个值(value)和一个指向下一个节点(next)的指针。

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

2. 创建一个函数(reverseList),该函数接受一个链表的头节点作为参数,并返回反转后的链表的头节点。

public ListNode reverseList(ListNode head) {
    ListNode prev = null; // 用于记录上一个节点
    ListNode curr = head; // 当前节点

    while (curr != null) {
        ListNode nextTemp = curr.next; // 临时变量,用于保存下一个节点
        curr.next = prev; // 反转当前节点的指针指向上一个节点
        prev = curr; // 更新上一个节点为当前节点
        curr = nextTemp; // 将当前节点更新为下一个节点
    }

    return prev; // 返回反转后的链表头节点
}

3. 创建一个函数(printList),该函数接受一个链表的头节点作为参数,并按顺序打印链表中的值。

public void printList(ListNode head) {
    ListNode curr = head;

    while (curr != null) {
        System.out.print(curr.val + " -> ");
        curr = curr.next;
    }
    
    System.out.println("null");
}

4. 测试代码

public static void main(String[] args) {
    // 创建一个链表 1 -> 2 -> 3 -> 4 -> 5
    ListNode head = new ListNode(1);
    ListNode node2 = new ListNode(2);
    ListNode node3 = new ListNode(3);
    ListNode node4 = new ListNode(4);
    ListNode node5 = new ListNode(5);

    head.next = node2;
    node2.next = node3;
    node3.next = node4;
    node4.next = node5;

    // 打印原链表
    System.out.println("Original List:");
    printList(head);

    // 反转链表
    ListNode reversedHead = reverseList(head);

    // 打印反转后的链表
    System.out.println("Reversed List:");
    printList(reversedHead);
}

5. 运行结果

Original List:
1 -> 2 -> 3 -> 4 -> 5 -> null
Reversed List:
5 -> 4 -> 3 -> 2 -> 1 -> null

通过上述示例代码可以看到,通过使用函数来实现链表的反转是比较简单的。只需要遍历链表,依次将每个节点的next指向上一个节点即可实现链表的反转。最后,打印反转后的链表,验证反转是否正确。这种方法的时间复杂度为O(n),其中n为链表的长度。