注册 登录
编程论坛 数据结构与算法

数据结构

dgc666 发布于 2017-09-24 15:45, 1769 次点击
设单循环链表 L1,对其遍历的结果是 。请将该循环链表拆
成两个单循环链表 L1 和 L2,使得 L1 中含有原 L1 表中序号为奇数的结点且遍历
结果为 ,L2 中含有原 L1 中序号为偶数的结点且遍历结果为 。
并选择自己擅长的程序设计语言实现本算法写出对应的程序。
2 回复
#2
xzlxzlxzl2017-09-24 21:27
下述代码不知道是否达到题主要求
程序代码:
#include <stdlib.h>
#include <stdio.h>
struct node
{
    int a;
    struct node *next;
};
void print(node *p)
{
    while(p)
    {
        printf("%d ",p->a);
        p=p->next;
    }
    printf("\n");
}
void main()
{
    struct node *l1,*l2,*hl1,*hl2,*p,*head=NULL;
    int i;
    for(i=0;i<15;i++)               //15可换成16,对总链表节点数的奇偶进行验证
    {
        p=(node*)malloc(sizeof(node));
        p->a=i;
        p->next=NULL;
        if(!head)head=l1=p;
        else l1=l1->next=p;
    }
    print(head);                     //输出原始链表
    hl1=l1=head;                     //偶数链表头指针
    hl2=l2=l1->next;                 //奇数链表头指针
    while(l1->next&&l2->next)
    {
        l1=l1->next=l1->next->next;  //分解形成偶数链表
        l2=l2->next=l2->next->next;  //分解形成奇数链表
    }
    if(l1)l1->next=NULL;
    if(l2)l2->next=NULL;             //分解的链表得到正确的结尾
    print(hl1);                      //输出偶数链表
    print(hl2);                      //输出奇数链表
}


输出结果:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 2 4 6 8 10 12 14
1 3 5 7 9 11 13
Press any key to continue
#3
九转星河2017-09-26 01:18
立个标记~
1