## C示例组合两个双向链表

```#include <stdio.h>

#include <stdlib.h>

struct node {

int data;

struct node *prev;

struct node *next;

};

struct node *list = NULL;

struct node *list_last = NULL;

struct node *even = NULL;

struct node *even_last = NULL;

struct node *odd = NULL;

struct node *odd_last = NULL;

struct node *current = NULL;

void insert(int data) {

// Allocate memory for new node;

struct node *link = (struct node*) malloc(sizeof(struct node));

// If head is empty, create new list

if(data%2 == 0) {

if(even == NULL) {

return;

} else {

current = even;

while(current->next != NULL)

current = current->next;

// Insert link at the end of the list

}

} else {

if(odd == NULL) {

return;

} else {

current = odd;

while(current->next!=NULL)

current = current->next;

// Insert link at the end of the list

}

}

}

//display the list

printf("\n[last] <=>");

//start from the beginning

while(ptr != NULL) {

printf(" %d <=>",ptr->data);

ptr = ptr->prev;

}

}

//display the list

//start from the beginning

while(ptr != NULL) {

printf(" %d <=>",ptr->data);

ptr = ptr->next;

}

printf(" [last]\n");

}

void combine() {

list = even;

}

// assign link_last to last node of new list

}

}

int main() {

int i;

for(i = 1; i <= 10; i++)

insert(i);

printf("Even : ");

printList(even);

printf("Even (R): ");

print_backward(even_last);

printf("Odd  : ");

printList(odd);

printf("Odd (R) : ");

print_backward(odd_last);

combine();

printf("Combined List :\n");

printList(list);

printf("Combined List (R):\n");

print_backward(list_last);

return 0;

}
```