简述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是链表的长度。