java中 if else语句 与 ?:运算的书写占行及逻辑清晰度比较(两个有序链表的合并)

本文章分析的是 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;
    }
}

有写的不明白的地方,恳请指出,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值