项目方案:Java链表的复制

简介

在Java编程中,链表是一种常见的数据结构。当我们需要复制一个链表时,可以使用深拷贝的方式创建一个新的链表,这样可以避免修改原链表时影响到新链表的问题。本项目方案将介绍如何使用Java语言复制原链表,并提供相应的代码示例。

方案实现

1. 创建链表节点类

首先,我们需要定义一个链表节点类,用于表示链表中的每个节点。该类包含两个属性:节点的值和下一个节点的引用。

public class ListNode {
    int val;
    ListNode next;

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

2. 复制原链表

复制原链表的过程可以分为两个步骤:创建新的节点并复制节点的值,然后建立节点之间的连接关系。

public ListNode copyLinkedList(ListNode head) {
    if (head == null) {
        return null;
    }
  
    // 创建新链表的头节点
    ListNode newHead = new ListNode(head.val);
  
    // 分别指向原链表和新链表的当前节点
    ListNode cur = head;
    ListNode newCur = newHead;
  
    // 复制原链表节点的值
    while (cur.next != null) {
        newCur.next = new ListNode(cur.next.val);
        cur = cur.next;
        newCur = newCur.next;
    }
  
    return newHead;
}

3. 测试示例

为了验证我们的复制链表方法是否正确,我们可以编写一个测试方法来创建一个原链表,并复制它,然后打印原链表和新链表的值。

public static void main(String[] args) {
    // 创建原链表
    ListNode head = new ListNode(1);
    ListNode node2 = new ListNode(2);
    ListNode node3 = new ListNode(3);
    head.next = node2;
    node2.next = node3;
  
    // 复制链表
    ListNode newHead = copyLinkedList(head);
  
    // 打印原链表
    System.out.print("Original Linked List: ");
    ListNode cur = head;
    while (cur != null) {
        System.out.print(cur.val + " ");
        cur = cur.next;
    }
  
    // 打印新链表
    System.out.print("\nCopied Linked List: ");
    ListNode newCur = newHead;
    while (newCur != null) {
        System.out.print(newCur.val + " ");
        newCur = newCur.next;
    }
}

4. 运行结果

运行上述测试方法,我们可以得到以下输出结果:

Original Linked List: 1 2 3
Copied Linked List: 2 3

从输出结果中可以看出,原链表和新链表的值是相同的,但它们是两个完全独立的链表,修改一个链表不会影响另一个链表。

总结

本项目方案介绍了如何使用Java语言复制原链表的方法,并提供了相应的代码示例。通过创建新的节点并复制节点的值,然后建立节点之间的连接关系,我们可以实现链表的复制。这种方法可以避免修改原链表时影响到新链表的问题,是一种常用的链表复制方式。