剑指offer-面试题17-合并两个排序的链表

来源:互联网 发布:剑灵火炮兰捏脸数据 编辑:程序博客网 时间:2024/06/13 00:20

题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如链表1,3,5,7和链表2,4,6,8.合并后链表为1,2,3,4,5,6,7,8

题目解析:先是判断给出的两个链表是否是空表。然后再比较两个表的头结点,小的结点作为头结点,然后两个链表依次遍历,同时比较大小,作为头结点的下一个结点。书中给的是使用递归,但是递归会耗费栈内存。所以直接用循环遍历就好。

//合并链表    public static ListNode mergeList(ListNode first, ListNode second) {        if (first == null) {            return second;        }        if (second == null) {            return first;        }        ListNode root = new ListNode();//用于表示头结点        ListNode next = root;//用于添加两个链表中的节点        while (first != null && second != null) {            if (first.data < second.data) {//比较两个链表中的元素值                next.next = first;                first = first.next;            } else {                next.next = second;                second = second.next;            }            next = next.next;        }        if (first == null) {            next.next = second;        }        if (second == null) {            next.next = first;        }        return root.next;    }
0 0
原创粉丝点击