天天看點

c 連結清單拼接

#include <stdio.h>
#include <stdlib.h>

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

struct ListNode *createlist(); /*裁判實作,細節不表*/
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2);
void printlist( struct ListNode *head )
{
     struct ListNode *p = head;
     while (p) {
           printf("%d ", p->data);
           p = p->next;
     }
     printf("\n");
}

int main()
{
    struct ListNode  *list1, *list2;

    list1 = createlist();
    list2 = createlist();
    list1 = mergelists(list1, list2);
    printlist(list1);
    
    return 0;
}

/* 你的代碼将被嵌在這裡 */      
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2)
{
  struct ListNode *p;
  //将list1 list2 存入數組 
  p=list1;
  int temp[100];
  int cnt=0;
  while(p){
    temp[cnt]=p->data;
    cnt++;
    p=p->next;
  }
  p=list2;
  while(p){
    temp[cnt]=p->data;
    cnt++;
    p=p->next;
  }
  int i,j,t;
  //冒泡排序 ,從小到大 
  for(i=0;i<cnt;i++){
    for(j=0;j<cnt-1;j++){
      if(temp[j]>temp[j+1]){
        t=temp[j];
        temp[j]=temp[j+1];
        temp[j+1]=t;
      }
    }
  }
  //在将數組存進連結清單(此處用尾插法)
  struct ListNode *head,*tail,*q;
  head=tail=NULL;
  for(i=0;i<cnt;i++){
    q=(struct ListNode *)malloc(sizeof(struct ListNode));
    q->data=temp[i];
    if(head==NULL&&tail==NULL){
      head=tail=q;
    }
    tail->next=q;
        tail=q;
  } 
  return head;
}