java 复制一个简单链表
时间: 2024-05-14 12:19:08 浏览: 15
假设链表节点的定义如下:
```java
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
```
复制一个简单链表可以使用如下代码:
```java
public ListNode copyList(ListNode head) {
if (head == null) {
return null;
}
// 创建一个新的头结点
ListNode newHead = new ListNode(head.val);
ListNode cur = newHead;
ListNode p = head.next;
// 复制链表
while (p != null) {
cur.next = new ListNode(p.val);
cur = cur.next;
p = p.next;
}
return newHead;
}
```
这里采用了迭代的方式,通过遍历原链表,依次复制每一个节点。注意要新建一个头结点,并且要返回这个新的头结点。
相关问题
java 复制一个链表
要复制一个链表,可以使用以下步骤:
1. 遍历原始链表,创建一个新的节点副本,并将其插入新链表中。
2. 在原始链表中移动到下一个节点,并在新链表中移动到下一个节点,重复步骤1直到原始链表末尾。
以下是一个Java函数,它可以复制一个链表:
```java
public ListNode copyList(ListNode head) {
if (head == null) {
return null;
}
ListNode newHead = new ListNode(head.val);
ListNode p = head.next;
ListNode q = newHead;
while (p != null) {
ListNode node = new ListNode(p.val);
q.next = node;
q = node;
p = p.next;
}
return newHead;
}
```
这个函数接收一个链表头节点作为参数,返回一个新的链表头节点。它首先检查原始链表是否为空,如果是,则返回null。否则,它首先创建一个新的头节点(使用原始链表的头节点的值),并用两个指针p和q分别指向原始链表和新链表的头部。然后,它遍历原始链表并将每个节点副本插入新链表中。最后,它返回新链表的头节点。
用Java实现一个无头链表
好的,以下是Java语言实现一个无头链表的代码:
```java
public class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
this.next = null;
}
}
public class LinkedList {
ListNode head;
public LinkedList() {
this.head = null;
}
public void add(int val) {
ListNode newNode = new ListNode(val);
if (head == null) {
head = newNode;
} else {
ListNode cur = head;
while (cur.next != null) {
cur = cur.next;
}
cur.next = newNode;
}
}
public void printList() {
ListNode cur = head;
while (cur != null) {
System.out.print(cur.val + " ");
cur = cur.next;
}
System.out.println();
}
}
```
代码解释:
首先定义一个 ListNode 类,表示链表中的每个节点,包含一个整数值 val 和指向下一个节点的指针 next。
然后定义一个 LinkedList 类,表示无头链表,包含一个头结点 head,初始值为 null。
在 LinkedList 类中,定义一个 add 方法,用于在链表尾部添加新元素。如果链表为空,直接将新元素作为头结点;否则,遍历链表,找到最后一个节点并将新元素插入其 next 指针所指的位置。
最后,定义一个 printList 方法,用于遍历链表并打印每个节点的值。
使用示例:
```java
LinkedList list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);
list.printList(); // 输出:1 2 3
```
注意,这是一个简单的无头链表实现,只包含了添加元素和遍历链表的基本操作。在实际应用中,需要根据具体需求进行扩展和优化。