跳到主要内容

简述Java实现简单链表复制 ?

参考答案:

在Java中,实现简单链表的复制主要涉及到创建一个新的链表,并将原链表中的所有节点复制到新链表中。这可以通过创建一个新节点,将其next引用指向下一个复制的节点,并将原节点的值复制到新节点来实现。以下是一个简单的实现示例:

首先,定义一个简单的链表节点类(ListNode):

public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

然后,我们可以实现一个复制链表的方法:

public class Solution {
    public ListNode cloneList(ListNode head) {
        if (head == null) {
            return null;
        }

        // 第一步:复制每个节点并插入到原节点之后
        ListNode curr = head;
        while (curr != null) {
            ListNode clone = new ListNode(curr.val);
            clone.next = curr.next;
            curr.next = clone;
            curr = clone.next;
        }

        // 第二步:分离原链表和复制的链表
        curr = head;
        while (curr != null) {
            ListNode clone = curr.next;
            if (clone.next != null) {
                ListNode nextClone = clone.next;
                curr.next = nextClone;
                clone.next = nextClone.next;
            }
            curr = curr.next;
        }

        return head.next;
    }
}

这个解决方案使用了两个步骤。在第一步中,我们遍历原链表,并为每个节点创建一个复制节点,然后将复制节点插入到原节点之后。在第二步中,我们再次遍历链表,将原链表和复制的链表分开,即将每个原节点的next引用指向下一个原节点,每个复制节点的next引用指向下一个复制节点。最后,返回复制的链表的头节点,即原链表头节点的下一个节点。

这个解决方案的时间复杂度是O(n),空间复杂度是O(1),其中n是链表的长度。