题解 | #合并两个排序的链表#

合并两个排序的链表

http://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337

public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    /*
    分别使用两个指针来遍历两个链表
    遍历结束的条件当这两个指针有一个等于null
    每次遍历把节点值小的节点加入到新的链表中,然后指针后移
    遍历结束
    把没有便利完的链表加入新链表末尾
    返回新链表
    */
    public ListNode Merge(ListNode list1,ListNode list2) {
        ListNode p = list1,q = list2;
        ListNode temp = null; // 用于指向需要加入新链表的节点
        
        ListNode returnList = new ListNode(-1); // 返回的链表的头节点
        ListNode tail = returnList; // 链表的尾节点,用于尾插入
        
        while(p != null && q != null){
            if(p.val <= q.val){
                temp = p; // 把节点拿出来
                p = p.next; // 指针后移
                // 插入节点
                temp.next = tail.next;
                tail.next = temp;
                // 尾指针后移
                tail = tail.next;
            }else{
                temp = q; // 把节点拿出来
                q = q.next; // 指针后移
                // 插入节点
                temp.next = tail.next;
                tail.next = temp;
                // 尾指针后移
                tail = tail.next;
            }
        }
        
        if(p != null){
            // 把剩余未遍历到的部分加入新链表
            tail.next = p;
        }
        
        if(q != null){
            // 把剩余未遍历到的部分加入新链表
            tail.next = q;
        }
        
        return returnList.next; // 返回首节点开始的部分
    }
}
全部评论

相关推荐

KPLACE:首先是板面看起来不够,有很多奖,比我厉害。项目要精减,大概详细描述两到三个,要把技术栈写清楚,分点,什么算法,什么外设,怎么优化,不要写一大堆,分点,你写上去的目的,一是让别人知道你做了这个知识点,然后在面试官技术面的时侯,他知道你会这个,那么就会跟你深挖这个,然后就是个人评价改为专业技能
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务