offer3:j将链表从尾到头的顺序返回成ArrayList集合记录。

从尾到头打印链表

http://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035

题目描述:
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
有两种方法,递归和非递归方法:
1.非递归
listNode 是链表,只能从头遍历到尾,但是输出却要求从尾到头,这是典型的"先进后出",我们可以想到栈!
ArrayList 中有个方法是 add(index,value),可以指定 index 位置插入 value 值
add(index,value)用于在列表的指定位置插入指定元素,并将当前处于该位置的元素及其后续元素的索引加1
所以在遍历 listNode 的同时将每个遇到的值插入到 list 的 0 位置,最后输出 listNode 即可得到逆序链表

public static ArrayList<integer> getListFromTailToHead(ListNode listNode) {</integer>

          ArrayList<Integer> list = new ArrayList<Integer>();
          while(listNode!=null){
                list.add(0,listNode.val);
                listNode=listNode.next;
            }//add(index,value)用于在列表的指定位置插入指定元素,并将当前处于该位置的元素及其后续
            return list;
    }

2.递归方法
借助系统的栈思想,可以实现递归的打印出由后到头的链表
ArrayList<integer> list = new ArrayList();
public ArrayList<integer> printListFromTailToHead(ListNode listNode) {</integer></integer>

    if(listNode!=null){
        printListFromTailToHead(listNode.next);
        list.add(listNode.val);
    }
    return list;    
}

补充下链表的增加新节点方法:
class ListNode {
int val;
ListNode next = null;

    ListNode(int val) {
       this.val = val;
   }//新增节点
    public void add(int newVal) {
        ListNode newNode=new ListNode(newVal);
        if(this.next==null){
            this.next=newNode;
        }else {
            this.next.add(newVal);
        }
    }
}
全部评论

相关推荐

有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
扭转乾坤_:现在企业都是学华为,一直通过丢池子里,最后捞
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务