本文共 1524 字,大约阅读时间需要 5 分钟。
本文将介绍如何将一个带头结点的单链表按照序号的奇偶性分割成两个子链表headA和headB,并保持原有节点的顺序不变。
首先,我们需要创建一个链表。以下是创建链表的关键代码:
LinkList* CreaList() { LinkList* head, *r, *s; head = (struct LinkList*)malloc(sizeof(struct LinkList)); r = head; int x; scanf("%d", &x); while (x != -100) { s = (struct LinkList*)malloc(sizeof(struct LinkList)); s->data = x; r->next = s; r = s; scanf("%d", &x); } r->next = NULL; return head;} 接下来,我们需要将链表按照序号的奇偶性分割成两个子链表headA和headB。以下是实现代码:
LinkList* Selet(LinkList* head) { LinkList* r, *s, *cur; int i = 0; LinkList* headB = (struct LinkList*)malloc(sizeof(struct LinkList)); r = head; s = headB; cur = head->next; r->next = NULL; while (cur != NULL) { i++; if (i % 2 != 0) { r->next = cur; r = cur; } else { s->next = cur; s = cur; } cur = cur->next; } r->next = NULL; s->next = NULL; return headB;} 最后,我们需要打印链表。以下是打印函数:
void PrintList(LinkList* head) { LinkList* p = head; p = p->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); return 0;} int main() { LinkList* head, *headA, *headB; head = CreaList(); PrintList(head); headB = Selet(head); PrintList(head); PrintList(headB); return 0;} 通过以上实现,我们可以轻松地将一个带头结点的单链表按照序号的奇偶性分割成两个子链表headA和headB,并保持原有节点的顺序不变。
转载地址:http://ijho.baihongyu.com/