有序表的合并,使用链表实现

img


这个是有序表的合并 链表实现

这个地方的三元运算符是不是用的有问题呀,如果其中一个链表空了,将另一个链表的元素全部加到pc里面,如果剩余的元素不止一个呢?这个三元运算符不是只能加入一次吗

pa不为空时,pc的下一个节点指向pa,否则pc的下一个节点指向pb
这样就实现了链表的合并了,先将pa链表放到pc上,然后再将pb链表放在pc上。

没有问题啊。别忘了这是链表,不是数组
链表只需要链接起来就好了。如果pa不为空,那么pc->next = pa,就将pa链表挂接到pc链表尾部了啊。不用管pa链表还剩多少个节点的

pa遍历La链表,pb遍历Lb链表,pa或pb的next本身就能得到链表的下一个节点,所以,三目运算符这里pc->next=pa?pa:pb;把没有遍历完的链表从pa或者pb拼接到pc上了。pa或pb节点的next已经记录了下一个节点。

以下答案引用自GPT-3大模型,请合理使用:

下面给出的代码可以解决上述问题:

struct ListNode {
  int val;
  struct ListNode* next;
};

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{
  struct ListNode *head,*curr,*tmp;

  if(l1==NULL)
    return l2;
  if(l2==NULL)
    return l1;
  
  if(l1->val < l2->val){
    head = l1;
    l1=l1->next;
  }
  else {
    head = l2;
    l2 = l2->next;
  }
  curr = head;
  
  while (l1 != NULL && l2 != NULL) {
    if(l1->val < l2->val){
      curr->next = l1;
      l1=l1->next;
    }
    else {
      curr->next = l2;
      l2 = l2->next;
    }
    curr=curr->next;
  }
  
  // 将剩余元素添加到合并表中
  if(l1 != NULL)
    curr->next = l1;
  if(l2 != NULL)
    curr->next = l2;
  
  return head;
}

如果我的回答解决了您的问题,请采纳我的回答

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632