#include <iostream> #include <stdlib.h> using namespace std; typedef struct _Node{ int data; struct _Node *next; }Node; typedef struct _LinkedList{ Node *head; }LinkedList; void init(LinkedList *L){ if(L == NULL) return; L->head = NULL; } void insert(LinkedList *L, int data){ Node *p = NULL; if(L == NULL) return; p = (Node*)malloc(sizeof(Node)); if(p == NULL) return; p->data = data; p->next = L->head; L->head = p; } void traversal(LinkedList L){ Node *p = NULL; p = L.head; while(p != NULL){ printf("%d ", p->data); p = p->next; } printf("/n/n"); } void destroy(LinkedList *L){ Node *p = NULL; Node *tmp = NULL; if(L == NULL) return; p = L->head; while(p != NULL){ tmp = p; p = p->next; free(tmp); tmp = NULL; } } /* * 单链表就地逆置,扫描一遍链表即完成逆置 * pre保存当前指针的前一个结点 * now保存当前指针 * next保存当前指针的下一个结点 */ void Reverse(LinkedList *L){ Node *pre = NULL; Node *now = NULL; Node *next = NULL; if(L == NULL || L->head == NULL) return; now = L->head; while(now != NULL){ next = now->next; now->next = pre; pre = now; now = next; } L->head = pre; } /* 合并链表 * L1的尾结点的next域指向L2的头结点 */ LinkedList* merge(LinkedList *L1, LinkedList *L2){ Node *p = NULL; if(L1 == NULL || L2 == NULL) return NULL; p = L1->head; while(p!= NULL && p->next != NULL){ p = p->next; } p->next = L2->head; return L1; } int main(int argc, char **args){ LinkedList L; LinkedList L2; int i = 0; memset(&L, 0, sizeof(LinkedList)); memset(&L2, 0, sizeof(LinkedList)); init(&L); init(&L2); for(i=0;i<10;++i){ insert(&L, i*i-5); insert(&L2, i); } traversal(L); Reverse(&L); merge(&L, &L2); traversal(L); destroy(&L); }