当前位置:   article > 正文

【力扣练习题】C语言答案

【力扣练习题】C语言答案

【21题,合并两个有序链表】
思路:递归:

1、如果q为NULL,p为NULL;返回NULL;

2、如果q为NULL,返回p;

3、如果p为NULL,返回 q;

4、判断两数大小,p小于等于q返回p,p->next递归调用函数

5、否则返回q,q->next递归调用函数

代码:
  1. struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
  2.   struct ListNode* p = list1;
  3.   struct ListNode* q = list2;
  4.    
  5.   if(q==NULL && p==NULL)
  6.   {
  7.       return NULL;
  8.   }
  9.   else if(q==NULL)
  10.   {
  11.       return p;
  12.   }
  13.   else if(p==NULL)
  14.   {
  15.       return q;
  16.   }    
  17.   if(p->val <= q->val)
  18.   {
  19.       p->next = mergeTwoLists(p->next,q);
  20.       return p;
  21.   }
  22.   q->next = mergeTwoLists(p,q->next);  
  23.   return q;
  24. }
思路:使用迭代的方法

1、定义头尾节点,

2、遍历判断两个链表的单个值,用尾插法将小的值代入链表

代码:
  1. struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
  2.   struct ListNode* p = list1;
  3.   struct ListNode* q = list2;
  4.   struct ListNode *tail = NULL;
  5.   struct ListNode *head = NULL;
  6.   if(q==NULL && p==NULL)
  7.   {
  8.       return NULL;
  9.   }
  10.   else if(q==NULL)
  11.   {
  12.       return p;
  13.   }
  14.   else if(p==NULL)
  15.   {
  16.       return q;
  17.   }  
  18.   while(p != NULL && q!=NULL)
  19.   {
  20.       struct ListNode *pnew = (q->val <= p->val)? q:p;
  21.       if(head == NULL)
  22.       {
  23.           head = pnew;
  24.           tail = pnew;
  25.       }
  26.       else
  27.       {
  28.           tail->next = pnew;
  29.           tail = pnew;  
  30.       }
  31.       if(q->val <= p->val)
  32.       {
  33.           q=q->next;
  34.       }
  35.       else
  36.       {
  37.           p= p->next;
  38.       }
  39.   }
  40.   tail->next = (q==NULL)?p:q;
  41.   return head;
  42. }
【环形链表】
思路:暴力求解

1、将所有遍历过的值全部替换为100001

2、判断如果遇到NULL则返回false

3、如果遇到大于100000的数则返回true;

代码:
  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. *     int val;
  5. *     struct ListNode *next;
  6. * };
  7. */
  8. bool hasCycle(struct ListNode *head) {
  9.   if(head == NULL)
  10.   {
  11.       return false;
  12.   }
  13.   struct ListNode *p = head;
  14.   int temp = 10000;
  15.   while(1)
  16.   {
  17.       p->val = 100001;
  18.       p = p->next;
  19.       if(p == NULL)
  20.       {
  21.           return false;
  22.           break;
  23.       }
  24.       else if(p->val > 100000)
  25.       {
  26.           return true;
  27.           break;
  28.       }        
  29.   }
  30. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/908683
推荐阅读
相关标签
  

闽ICP备14008679号