从头到尾打印链表(含main函数)

版权声明:转载请注明出处 https://blog.csdn.net/fan_lulu/article/details/83096876

以下代码有参考

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

猜你喜欢

转载自blog.csdn.net/fan_lulu/article/details/83096876