剑指Offer 链表相关问题--从尾到头打印链表、合并两个排序的链表

来源:互联网 发布:有了阿里云ems如何建站 编辑:程序博客网 时间:2024/06/05 21:55

面试题5:从尾到头打印链表

题目描述:

输入一个链表,从尾到头打印链表每个节点的值。

题目解析:
方法一:先遍历链表,将每个节点push进栈中,然后再依次弹出。即实现逆序输出
方法二:通过递归的方式(但要考虑链表过长,递归层次过深的情况)
方法三:反转链表,然后遍历输出(不建议采用)

代码:
方法一:

/** *    public class ListNode { *        int val; *        ListNode next = null; * *        ListNode(int val) { *            this.val = val; *        } *    } * */    import java.util.ArrayList;    import java.util.Stack;    public class Solution {        public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {            ArrayList<Integer> result = new ArrayList<>();            if (listNode == null)                return result;            Stack<ListNode> stack = new Stack<ListNode>();            while (listNode != null) {                stack.push(listNode);                listNode = listNode.next;            }            // 输出结果            while (!stack.isEmpty()) {                result.add(stack.pop().val);            }            return result;        }    }

方法二:

import java.util.ArrayList;import java.util.Stack;public class Solution {    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        ArrayList<Integer> result = new ArrayList<>();        printList(listNode, result);        return result;    }    private void printList(ListNode node, ArrayList<Integer> result) {        if (node != null) {            printList(node.next, result);            result.add(node.val);        }    }}

方法三:反转链表

剑指Offer-题16 反转链表(Java)


面试题17 合并两个排序的链表

问题描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

问题分析:
简单比较尾插法即可;

代码:
/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/public class Solution {    public ListNode Merge(ListNode list1,ListNode list2) {        ListNode head = new ListNode(0);        ListNode tempList = head;        while (list1 != null && list2 != null) {            if (list1.val < list2.val) {                tempList.next = list1;                list1 = list1.next;            } else {                tempList.next = list2;                list2 = list2.next;            }            tempList = tempList.next;        }        if (list1 != null)            tempList.next = list1;        if (list2 != null)            tempList.next = list2;        return head.next;    }}




0 0
原创粉丝点击