思路:
(1)找到中间节点,将原链表一分为二
(2)后半段链表原地逆置
(3)合并链表
#include <stdio.h> #include <stdlib.h> //定义节点类型 typedef struct LNode { int data;//数据域 struct LNode *next;//指针域 } LNode, *LinkList; void tailList(LinkList &l) { l = (LinkList) malloc(sizeof(LNode)); l->next = NULL; int x; scanf("%d", &x);//s指向新节点,r指向链表尾 LinkList s, r = l; while (x != 9999) { s = (LinkList) malloc(sizeof(LNode));//s存储了这个节点的起始地址.s指向此节点 s->data = x; r->next = s;//新节点给尾节点next指针 r = s;//r指向新的尾部 scanf("%d", &x); } r->next = NULL; } void printList(LinkList L) { L = L->next; while (L != NULL) { printf("%d", L->data);//打印当前结点数据 L = L->next;//指向下一个结点 if (L !=