java 复制一个简单链表
时间: 2024-05-14 12:19:08 浏览: 63
假设链表节点的定义如下:
```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代码,把一个链表复制到另一个新链表中
当你想要将一个链表的内容复制到一个新的链表中时,可以采用迭代或递归的方式来实现。这里是一个简单的Java代码示例,使用迭代方法:
```java
public class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
this.next = null;
}
}
public class CopyList {
public ListNode copyList(ListNode head) {
if (head == null || head.next == null) {
// 如果链表为空或者只有一个元素,则直接返回相同的节点
return new ListNode(head.val);
}
// 创建一个辅助节点作为新链表的头
ListNode cloneHead = new ListNode(head.val);
// 使用临时指针指向原链表的当前节点,辅助指针始终指向新链表的当前节点
ListNode temp = head;
ListNode cloneTemp = cloneHead;
// 遍历原链表,将每个节点值复制到新链表
while (temp != null) {
cloneTemp.next = new ListNode(temp.val);
cloneTemp = cloneTemp.next; // 移动辅助指针
temp = temp.next; // 移动原链表指针
}
return cloneHead;
}
}
```
这段代码创建了一个新的链表,其结构与给定的原链表相同。在这个例子中,`ListNode`是一个自定义节点类,包含一个整数值`val`和指向下一个节点的引用`next`。
java7-6 链表去重
在Java 7及以上版本中,可以使用HashSet数据结构来去除链表(LinkedList)中的重复元素。HashSet不允许有重复的元素,所以你可以遍历链表,将每个元素添加到HashSet中,如果添加成功(即元素不在集合中),则说明该元素是唯一的,不需要重复。
以下是简单的步骤:
```java
import java.util.HashSet;
import java.util.LinkedList;
public class LinkedListNoDuplicates {
public static void removeDuplicates(LinkedList<String> list) {
HashSet<String> set = new HashSet<>(list);
list.clear();
list.addAll(set);
}
// 示例
public static void main(String[] args) {
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("a");
linkedList.add("b");
linkedList.add("c");
linkedList.add("d");
linkedList.add("b"); // 重复元素
System.out.println("Before removing duplicates:");
for (String s : linkedList) {
System.out.print(s + " ");
}
removeDuplicates(linkedList);
System.out.println("\nAfter removing duplicates:");
for (String s : linkedList) {
System.out.print(s + " ");
}
}
}
```
在这个例子中,`removeDuplicates`方法首先创建一个HashSet,并将链表的内容复制进去,自然就去除了重复项。然后清空原来的链表,再将HashSet的所有元素添加回去,得到的就是去重后的链表。
阅读全文