java 单链表,从尾部插入看不懂,求高手指导。
public class List4j {private Node head ;
private int length;
public List4j(){
head = new Node(0,null);
length = 0;
}
public void addhead(int item){
Node node = new Node(item,null);
node.setNext(head.getNext());
head.setNext(node);
length++;
}
/*
* addtail这一步看不懂,这个方法执行完后head的内容是什么?
*/
public void addtail(int item){
Node node = new Node(item,null);
Node temp = head; //这一步后内存中是什么情况,temp是指向head指向的那块内存? //还是有重新在堆里开辟了新内存?
while(null != temp.getNext()){
temp = temp.getNext();
}
temp.setNext(node);
length++;
//System.out.println(temp.getData());
//System.out.print(head.getData());
System.out.println(head == temp);
}
public void addindex(int item,int index){
Node node = new Node(item,null);
Node temp = head;
for(int i=0; i<index-1;i++){
temp = temp.getNext();
}
node.setNext(temp.getNext());
temp.setNext(node);
length++;
}
public void find(int index){
if(index<1 || index >length){
System.out.print("此位置空!");
}
Node temp = head;
for(int i=0; i<index;i++){
temp = temp.getNext();
}
System.out.println("链表中第"+index+"个位置的值为"+temp.getData());
}
public void delindex(int index){
if(index<1 || index >length){
System.out.print("位置不存在!");
}
Node temp = head;
for(int i=0; i<index-1;i++){
temp = temp.getNext();
}
temp.setNext(temp.getNext().getNext());
length--;
}
public void print(){
Node temp = head;
while(null != temp.getNext()){
System.out.println(temp.getNext().getData());
temp = temp.getNext();
}
System.out.println("链表长度为:"+length);
}
public static void main(String[] args){
List4j list = new List4j();
/*list.addhead(1);
list.addhead(2);
list.addhead(3);
list.addindex(4, 3);
list.addhead(5);*/
list.addtail(1);
list.addtail(2);
list.addtail(3);
list.print();
//list.find(1);
}
}
***************************************************
public class Node {
private int data;
private Node next;
Node(int data,Node next){
this.data = data;
this.next = next;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
--------------------编程问答--------------------
Node temp = head; //这一步后内存中是什么情况,temp是指向head指向的那块内存? //还是有重新在堆里开辟了新内存?
while(null != temp.getNext()){
temp = temp.getNext();
}
temp.setNext(node);
Note temp = head;
把head的地址赋值给temp,因为下面有一个while循环,查找到链表的最后一个结点的地址。
temp是指向head指向的那块内存?
是的! --------------------编程问答-------------------- 也就是说temp其实是操作的head所指向的那块堆内存中的内容? 那我把Note temp = head; 这句去了把temp都替换成head输出的内容为什么不一样?最近在学数据结构感觉有点吃力,不过吧里人都说要理解代码,多写在能学好。o(︶︿︶)o 唉,真心伤不起呀。 --------------------编程问答--------------------
这样head的值就变了,再次遍历list的时候,head已经在最后,而不是指向链表头
补充:Java , Java SE