1. 程式人生 > >從頭到尾列印連結串列(含main函式)

從頭到尾列印連結串列(含main函式)

以下程式碼有參考

https://my.oschina.net/u/2822116/blog/712874

包結構

程式碼

package demo1;
import java.util.Stack;

class ListNode {

    ListNode next = null;
    int data;
    public ListNode(int data) {
        this.data = data;
    }
}
public class Solution {
    public static void main(String args[]){
        ListNode node1=new ListNode(1);
        ListNode node2=new ListNode(2);
        ListNode node3=new ListNode(3);
        ListNode node4=new ListNode(4);
        //node1.data=1;
        //node2.data=2;
        //node3.data=3;
        //node4.data=4;
        node1.next=node2;
        node2.next=node3;
        node3.next=node4;
        node4.next=null;
        printListFromTailToHead(node1);
    }
    public static void printListFromTailToHead(ListNode Newnode){
        Stack<Integer> stack = new Stack<Integer>();
        while (Newnode!=null){
            stack.push(Newnode.data);
            Newnode=Newnode.next;
        }
        while(!stack.isEmpty()){
            System.out.println(stack.pop());
        }
    }
}

最後一段程式碼也可替換為

public static void printListFromTailToHead(ListNode Newnode){
        Stack<ListNode> stack = new Stack<ListNode>();
        while (Newnode!=null){
            stack.push(Newnode);
            Newnode=Newnode.next;
        }
        while(!stack.isEmpty()){
            System.out.println(stack.pop().data);
        }
    }

兩者的區別在於我們要在stack中儲存連結串列還是連結串列中的資料,從而stack在pop時也會選擇是pop連結串列還是pop data

結果

部分知識點 :this和super

class ListNode {

    ListNode next = null;
    int data;
    public ListNode(int data) {
        this.data = data;
    }
}

以上程式碼中,this的作用是用來區別物件的成員變數和方法的形參,this.data用來表示左邊的值為為成員變數,而不是這個建構函式的形式引數。 super用來訪問父類的方法或成員變數。當自雷的方法或成員變數與父類有相同名字時也會覆蓋父類的方法或成員變數,要想訪問父類的方法或成員變數只能通過super關鍵字來訪問

易錯面試題:

package demo3;
class Base{
    public Base(){
        System.out.println("base");
    }
}
class Sub extends Base{
    public Sub(){
        System.out.println("sub");
        super();
    }
}
public class Test {
    public static void main(String args[]){
        Base s=new Sub();
    }
}

執行後結果:

 

改正後程式碼:

package demo3;
class Base{
    public Base(){
        System.out.println("base");
    }
}
class Sub extends Base{
    public Sub(){
        super();
        System.out.println("sub");

    }
}
public class Test {
    public static void main(String args[]){
        Base s=new Sub();
    }
}

執行後 

 


父類和子類new時

 

結果

 

結果均為

若程式碼為

結果為

 

以上程式碼部分參考:

https://my.oschina.net/u/2822116/blog/712874