C#实现两个顺序链表的合并
最近开始刷leetcode,刷了一周时间,确实会上瘾,不过能巩固很多基础知识,包括算法和语言。我现在是架构与编码并行。今天遇到的是两个列表的合并,刚开始我自己写了一个笨方法来合并,虽然通过了测试,但是代码质量不高,于是研究了其他人写的代码。 //传入的两个链表本身是从小到大排序好 public ListNode MergeTwoLists(ListNode list1, ListNode list2) { ListNode head = new ListNode(); //定义新的链表头 ListNode current = head;//定义链表最新的next地址 //遍历两个链表,任何一个完毕后就终止循环 while (list1 != null && list2 != null) { if (list1.val < list2.val) { //如果list1的元素值小,则把当前list1赋予current.next,注意这里相当于head.next current.next = list1; list1 = list1.next; } else { current.next = list2; list2 = list2.next; } //将current变量指向current.next,相当于head.next,当进入下一次循环给current.next赋值的时候,相当于是给head.next.next赋值了,一直这么循环到最后 current = current.next; } //head链表的next指向未循环完成的部分 current.next = list1 == null ? list2 : list1; //返回合并后的链表 return head.next; } 我刚开始发懵了,居然没理解这部分代码,因为忽略了“每次循环之后current的引用指向已经发生变化”。