public ListNode mergeTwoLists(ListNode list1, ListNode list2) {if (list1 == null && list2 == null) {return null;}List<ListNode> node = new ArrayList<>();while (list1 != null) {node.add(list1);list1 = list1.next;}while (list2 != null) {node.add(list2);list2 = list2.next;}Collections.sort(node, new Comparator<ListNode>() {@Overridepublic int compare(ListNode o1, ListNode o2) {return o1.val - o2.val;}});ListNode res = node.get(0);ListNode tail = res; //链表头引用for (int i = 1; i < node.size(); i++) {res.next = node.get(i);res = res.next;}return tail;}
错例示范
问题
我理解LinkedList的概念,但我仍然不明白如何将整数列表转换为相同的LinkedList!你知道吗 我已经试着在网上阅读了一些关于这方面的信息,我看到有一些递归选项可用,但递归是v.v.昂贵的,我不是它的超级粉丝。下面是LeetCode对LinkedList的实现,以及我将列表转换为LinkedList的方法
# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Nonelist1 = [4,5,1,2,0,4]head = ListNode(list1[0])e = 1while e < len(list1):print(head)head.next = ListNode(list1[e])head = head.nexte+=1return head
回答
问题是您缺少对列表头的引用,因为您正在覆盖它。从这个开始:list1 = [4,5,1,2,0,4]head = ListNode(list1[0])tail = head然后tail将引用链表的最后一个元素。现在在你的循环中你做到了:while e < len(list1):print(head)tail.next = ListNode(list1[e])tail = tail.nexte+=1所以您可以像以前一样向列表中添加一个元素,但是现在我们正在修改tail变量。最后:return head现在将返回列表的头节点。你知道吗
