当前位置:编程学习 > JAVA >>

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 唉,真心伤不起呀。 --------------------编程问答--------------------
引用 2 楼 fb352575397 的回复:
也就是说temp其实是操作的head所指向的那块堆内存中的内容?  那我把Note temp = head; 这句去了把temp都替换成head输出的内容为什么不一样?最近在学数据结构感觉有点吃力,不过吧里人都说要理解代码,多写在能学好。o(︶︿︶)o 唉,真心伤不起呀。

这样head的值就变了,再次遍历list的时候,head已经在最后,而不是指向链表头
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,