本文章分析的是 if else 语句及其所包含的函数体与 ?:运算书写上占的代码行数及逻辑性比较
用例:
实现两个有序链表的合并
实现思路 穿针引线(从小到大)
将待合并的两个链表比较第一个元素 将值小的做为线头
然后 用两个指针分别指向这两个链表的未编入的最开始元素,(被合并的叫做编入)
比较值的大小 将线头的下一个元素指向值小者,接着值小者变为线头,对应指针下移一个元素,另一个指针不动以此循环,直到线头的下一个元素指向空,循环结束。
最后确定那一段链表,尚有元素未被编入,将线头的下一个元素指向该段的起点,合并结束。
简单来讲就是,按顺序每次都比较两个链表的元素,小的被编入,被编入的不再参与比较,未被编入的继续比较,直到一支链表到头,直接链上另一支链表的余下部分,合并结束。
代码及说明
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
//这一串代码中 我用了两种不同的写法来实现同一个逻辑 1.if,else语句及其所包含的函数体 2. ? :运算的赋值
//在用第一种语句在非此即彼的情况下存在同一变量的赋值语句 用第二种运算会将代码行数节省 至少一行 在代码行数的节省上从这个例子来体现
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null || l2 == null)
return l1 == null ? l2:l1;
ListNode point1;
ListNode point2;
boolean j = l1.val < l2.val;
ListNode head = j ? l1 : l2;
point1 = head.next;
point2 = j ? l2 : l1;
//? : 运算 4行 把 boolean j 去掉是3行
// ListNode head ;
// if(l1.val < l2.val)
// {
// head = l1;
// point1 = head.next;
// point2 = l2;
// }else{
// head = l2;
// point1 = l1;
// point2 = head.next;
// }
//if else 语句 11行 其实节省起来写是8行 节省5行
ListNode lead = head;
while(head.next != null)
{
boolean judge = point1.val < point2.val ;
ListNode temp = judge ? point1.next : point2.next;
head.next = judge ? point1 : point2;
head = judge ? point1 : point2;
if(judge)
point1 = temp;
else
point2 = temp;
// ? : 运算 8行 去掉 judge 节省写 if else 语句 是 5行
//
// ListNode temp;
// if(point1.val < point2.val)
// {
// temp = point1.next;
// head.next = point1;
// head = point1;
// point1 = temp;
// }else{
// temp = point2.next;
// head.next = point2;
// head = point2;
// point2 = temp;
// }
// if else 12 行节省写是 9行 节省 4行
//我们看到 在 符合语法且 以分号断行的非此即彼的对同一变量的赋值情况下 if else 会比 ? : 运算 书写所占行数多。
//在代码的可读性上小量的一次性的比较上 ? : 运算读起来舒服也好懂比如代码中的第一段代替 但是数量一大那么if else 语句是逻辑更清晰好食用的比如代码中的第二段替代
}
head.next = (point1 == null ? point2 : point1);
return lead;
}
}
有写的不明白的地方,恳请指出,谢谢!