C语言怎样合并两个有序链表

本文主要介绍"C语言如何合并两个有序链表",希望能够解决您遇到有关问题,下面我们一起来看这篇 "C语言如何合并两个有序链表" 文章。

C语言合并两个有序链表的方法:拼接指定的两个有序链表的所有节点即可。例如两个有序链表分别为【1->2->4】和【1->3->4】,合并后的有序链表为【1->1->2->3->4->4】。

具体方法:

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

输入:

1->2->4, 1->3->4

输出:

1->1->2->3->4->4

分析:两个链表为有序链表,所以依次遍历两个链表比较大小即可。

代码实现:

/**
* 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 *l = (struct ListNode*)malloc(sizeof(struct ListNode));
  l->next = NULL;
  struct ListNode *list1 = l1;
  struct ListNode *list2 = l2;
  if(l1->val<l2->val){
      l->val=l1->val;
      if(list1->next==NULL){
          l->next=list2;
          return l;
      }
      list1=list1->next;
  }else{
      l->val=l2->val;
      if(list2->next==NULL){
          l->next=list1;
          return l;
      }
      list2=list2->next;
  }
  struct ListNode *list = l;
  while(list1->next!=NULL&&list2->next!=NULL){
      if(list1->val<=list2->val){
          struct ListNode *body = (struct ListNode *)malloc(sizeof(struct ListNode));
          body->val = list1->val;
          body->next = NULL;
          list->next = body;
          list = list->next;
          list1 = list1->next;
      }else{
          struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));
          body->val=list2->val;
          body->next=NULL;
          list->next=body;
          list=list->next;
          list2=list2->next;
      }
  }
  if(list1->next==NULL){
      while(list2->next!=NULL){
          if(list1->val<=list2->val){
              list->next = list1;
              list = list->next;
              list->next=list2;
              return l;
          }else{
              struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));
              body->val=list2->val;
              body->next=NULL;
              list->next=body;
              list=list->next;
              list2=list2->next;
          }
      }
  }else{
      while(list1->next!=NULL){
          if(list2->val<=list1->val){
              list->next=list2;
              list=list->next;
              list->next=list1;
              return l;
          }else{
              struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));
              body->val=list1->val;
              body->next=NULL;
              list->next=body;
              list=list->next;
              list1=list1->next;
          }
      }
  }
  if(list1->next==NULL&&list2->next==NULL){
      if(list1->val<=list2->val){
          list->next = list1;
          list=list->next;
          list->next=list2;
      }else{
          list->next=list2;
          list=list->next;
          list->next=list1;
      }
  }



  return l;
}

关于 "C语言如何合并两个有序链表" 就介绍到这。希望大家多多支持编程宝库

本文主要介绍"vc++6.0新建c语言文件的方法",希望能够解决您遇到有关问题,下面我们一起来看这篇 "vc++6.0新建c语言文件的方法" 文章。vc++6.0新建c语言文件的方法:首先打开visual ...