文章目录
单链表简单操作
先说明我的理解。文章后面,会有代码验证
(1)p=q
这里相当于给一个名叫q的内存空间起了一个别名叫做p。p和q的hashcode相同,所以p和q实际上是同一个对象。
举个例子:你有一本书叫做《q》,你不方便使用它的原名。你就想给它起个别名p。
- 首先你需要将p定义为书名的即格式《p》 node p = null;
- 接着在给那本书起别名。p = q
(2)p.next = q
将q赋值给p.next。也就是说p的next中保存的会是q。那么p的下一个节点为q同时p与t的连接断开了
(3)p=q.next
理解为q.next(t)赋值给p,也就是将t赋值给p。这里相当于给一个名叫t的内存空间起了一个别名叫做p。p和t的hashcode相同,所以p和t实际上是同一个对象,只不过这个对象有两个名字。
###下面我将给出代码说明,为便于理解和证明为Node添加name属性
Node类
public class Node {
public String name;
public int value;
public Node next;
public Node(){
}
public Node(int data){
this.value = data;
}
public Node(String name){
this.name = name;
}
public Node(String name,int data){
this.name = name;
this.value = data;
}
}
输出类Print
public class Print {
public static void printLinkedList(Node node) {
System.out.print("Linked List: ");
while (node != null) {
System.out.print(node.name + ":"+ node.value + "->");
node = node.next;
}
System.out.println();
}
}
测试类
public class Test {
public static void main(String[] args) {
Print print = new Print();
Node node1 = new Node("node1",1);
Node node2 = new Node("node2",2);
Node node3 = new Node("node3",3);
Node node4 = new Node("node4",4);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = null;
//(1)未作修改
//print.printLinkedList(node1);
//(2)测试 p = q node = node2
//Node node = new Node("node");
//node = node2;
//System.out.println(node.hashCode());
//System.out.println(node2.hashCode());
//System.out.println(node == node2);
//print.printLinkedList(node1);
//print.printLinkedList(node);
//(3)测试p.next = q node2.next = node
//Node node = new Node("node",22);
//node2.next = node;
//System.out.println(node.hashCode());
//System.out.println(node2.next.hashCode());
//System.out.println(node3.hashCode());
//print.printLinkedList(node1);
//(4)测试p=q.next node = node2.next
Node node = new Node("node",22);
node = node2.next;
System.out.println(node.hashCode());
System.out.println(node2.next.hashCode());
System.out.println(node == node3);
print.printLinkedList(node1);
print.printLinkedList(node);
}
}
运行结果
(1)
Linked List: node1:1->node2:2->node3:3->node4:4->
(2)node = node2;测试结果
460141958
460141958
true
Linked List: node1:1->node2:2->node3:3->node4:4->
Linked List: node2:2->node3:3->node4:4->
第二个是以node2开头,证实了是将node2赋值给node所以
name,value,next都相同
(3)node2.next = node;测试结果
charter2.Node@1b6d3586
charter2.Node@1b6d3586
charter2.Node@4554617c
Linked List: node1:1->node2:2->node:22->
这里node2之后是node2和node3的连接被断开了
(4)node = node2.next;测试结果
460141958
460141958
true
Linked List: node1:1->node2:2->node3:3->node4:4->
Linked List: node3:3->node4:4->
这里证实了将node2的下一个节点赋值给node所以node和node3的
name,value,next都相同。
延伸
1.理解node2.next = node; node.next = node3是在弄得node2和node3之间插入node节点
2.理解node.next = node3;node2.next = node; 是在弄得node2和node3之间插入node节点
3.p.next=q.next是删除q节点
验证
//插入节点1
//Node node = new Node(22);
//node2.next = node;
//node.next = node3;
//print.printLinkedList(node1);
//插入节点2
//Node node = new Node(22);
//node.next = node3;
//node2.next = node;
//print.printLinkedList(node1);
//删除节点
//node2.next = node3.next;
//print.printLinkedList(node1);