剑指offer:合并两个排序的链表、链表中倒数第k个结点

目录

合并两个排序的链表

链表中倒数第k个结点


合并两个排序的链表

这个题是属于比较简单的,代码自然而然的也会简洁很多,这个题可以考虑创建一个新链表,再利用双指针,来比较哪个小来进行尾插,不过这里要注意第一个位置需要单独进行头插,或者建立一个带哨兵的链表来一直尾插,

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
    if(l1==NULL)
        return l2;
    if(l2==NULL)
        return l1;
    struct ListNode* head = NULL,*tail = NULL;//创建头变量和尾变量方便头插尾插
    //带哨兵的链表,方便尾插
    //tail = head = (int*)malloc(sizeof(struct ListNode));
    if((l1->val)>(l2->val))
    {
        head = l2;
        tail = l2;
        l2 = l2->next;
    }
    else
    {
        head = l1;
        tail = l1;
        l1 = l1->next;
    }
    while(l1 && l2)
    {
        //取小尾插
        if((l1->val)>(l2->val))
        {
            tail->next = l2;
            tail = l2;
            l2 = l2->next;
        }
        else
        {
            tail->next = l1;
            tail = l1;
            l1 = l1->next;
        }
    }
    if(l1 == NULL)
    {
        tail->next = l2;
    }
    else{
        tail->next = l1;
    }
    //realhead = head ->next
    //带哨兵的返回要为 return realhead 
    return head;
}

链表中倒数第k个结点

这个题目也很简单,这里就可以引用快慢指针来进行操作定义一个快指针fast,定义一个慢指针slow快指针要比慢指针多走k步,这样子返回慢指针就达到要求了

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* getKthFromEnd(struct ListNode* head, int k){
    struct ListNode* slow = head,*fast = head;
    while(k--)
    {
        //如果k大于链表长度
        if(fast)
            fast = fast->next;
        else
            return NULL;
    }
    while(fast)
    {
        slow = slow->next;
        fast = fast->next;
    }
    return slow;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值