题目要求:复制一个单链表,返回复制之后链表的头结点;注(不能返回复制之前的头结点)
/**
* 思想:先让指针p指向原始链表的头结点,声明一个复制链表的头结点为空,同时声明另外一个指针指向该复制链表的头结点;
* 若是首次复制节点,则复制链表的头结点的next为空,并让指针q指向该头结点;
* 否则,再次new一个节点,让指针q指向该节点,直到读取到初始链表的最后一个节点;
*/
节点类:
public class Node {
int val;
Node next = null;
public Node(int val){
this.val = val;
}
}
public class TestNode {
public static void main(String[] args) {
Node n1 = new Node(1);
Node n2 = new Node(2);
Node n3 = new Node(3);
Node n4 = new Node(4);
Node n5 = new Node(5);
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
n5.next = null;
Node t = n1;
while(t != null){
System.out.print(t.next + " ");
t = t.next;
}//Node@4b6e3f87 Node@330cdec1 Node@11f46b16 Node@45a27a8f null
System.out.println();
/**
* 思想:先让指针p指向原始链表的头结点,声明一个复制链表的头结点为空,同时声明另外一个指针指向该复制链表的头结点;
* 若是首次复制节点,则复制链表的头结点的next为空,并让指针q指向该头结点;
* 否则,再次new一个节点,让指针q指向该节点,直到读取到初始链表的最后一个节点;
*/
Node p = n1;
Node list = null;
Node q = list;
while(p != null){
if(list == null){
list = new Node(p.val);
q = list;
}else{
Node n = new Node(p.val);
q.next = n;
q = q.next;
}
p = p.next;
}
Node test = list;
while(test != null){
System.out.print(test.next + " ");
test = test.next;
}//Node@2e1c6600 Node@4a6ca1a6 Node@21e8bf76 Node@3771ed5e null
}
}
结果如下:
Node@4b6e3f87 Node@330cdec1 Node@11f46b16 Node@45a27a8f null
Node@2e1c6600 Node@4a6ca1a6 Node@21e8bf76 Node@3771ed5e null