zoukankan      html  css  js  c++  java
  • 习题11-7 奇数值结点链表 (20 分)

    本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下:

    struct ListNode {
        int data;
        ListNode *next;
    };

    函数接口定义:

    struct ListNode *readlist();
    struct ListNode *getodd( struct ListNode **L );

    函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−时表示输入结束,函数应返回指向单链表头结点的指针。

    函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。

    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    struct ListNode {
        int data;
        struct ListNode *next;
    };
    
    struct ListNode *readlist();
    struct ListNode *getodd( struct ListNode **L );
    void printlist( struct ListNode *L )
    {
         struct ListNode *p = L;
         while (p) {
               printf("%d ", p->data);
               p = p->next;
         }
         printf("
    ");
    }
    
    int main()
    {
        struct ListNode *L, *Odd;
        L = readlist();
        Odd = getodd(&L);
        printlist(Odd);
        printlist(L);
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */

    输入样例:

    1 2 2 3 4 5 6 7 -1

    输出样例:

    1 3 5 7
    2 2 4 6

    提交:

    #include <stdio.h>
    #include <stdlib.h>
    
    // struct ListNode {
    //     int data;
    //     struct ListNode *next;
    // };
    
    struct ListNode *readlist(){
        struct ListNode *head,*tail,*temp; //head->头节点,tail->尾节点,temp->临时开辟节点
        tail = temp = (struct ListNode*)malloc(sizeof(struct ListNode));//尾节点开始也指向临时开辟节点
        head = NULL;
        int cnt = 0;//节点个数
        scanf("%d",&temp->data);
        while(temp->data != -1){
            cnt++;
            if (cnt == 1) head = temp;
            else tail->next=temp;
            tail = temp;
            temp = (struct ListNode*)malloc(sizeof(struct ListNode));
            scanf("%d",&temp->data);
        }
        tail->next=NULL;
        return head;
    };
    struct ListNode *getodd( struct ListNode **L ){
        //struct ListNode *p = *L;
        struct ListNode *odd_head,*odd_tail,*odd_temp;//新得奇数链表
        struct ListNode *even_head,*even_tail;//新得偶数链表
        odd_tail = even_tail = odd_temp = malloc(sizeof(struct ListNode));
        odd_head = even_head = NULL;
        int cnt1 = 0,cnt2 = 0;//cnt1为奇书链表节点个数,cnt2为偶数链表节点个数
        while(*L){
            odd_temp->data = (*L)->data;
            odd_temp->next = NULL;
            if ((*L)->data%2 == 1) {//奇数节点
                cnt1++;
                if (cnt1 == 1) odd_head = odd_temp;//插入奇数链表
                else odd_tail->next = odd_temp;
                odd_tail = odd_temp;
            } else {//偶数节点
                cnt2++;
                if (cnt2 == 1) even_head = odd_temp;
                else even_tail->next = odd_temp;
                even_tail = odd_temp;
            }
            odd_temp = (struct ListNode*)malloc(sizeof(struct ListNode));
            *L = (*L)->next;
        }
        *L = even_head;
        return odd_head;
    };
    // void printlist( struct ListNode *L )
    // {
    //      struct ListNode *p = L;
    //      while (p) {
    //            printf("%d ", p->data);
    //            p = p->next;
    //      }
    //      printf("
    ");
    // }
    
    int Main()
    {
        struct ListNode *L, *Odd;
        L = readlist();
        Odd = getodd(&L);
        printlist(Odd);
        printlist(L);
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
  • 相关阅读:
    HDU 6191 Query on A Tree ( 2017广西邀请赛 && 可持久化Trie )
    BZOJ 4318 OSU! ( 期望DP )
    洛谷 P2473 [SCOI2008]奖励关 ( 期望DP )
    Codeforces #499 E Border ( 裴蜀定理 )
    HDU 6444 Neko's loop ( 2018 CCPC 网络赛 && 裴蜀定理 && 线段树 )
    HDU 6438 Buy and Resell ( 2018 CCPC 网络赛 && 贪心 )
    Nowcoder Hash Function ( 拓扑排序 && 线段树优化建图 )
    Nowcoder Playing Games ( FWT 优化 DP && 博弈论 && 线性基)
    js中的深拷贝与浅拷贝
    nrm 源管理器
  • 原文地址:https://www.cnblogs.com/cgy-home/p/15046902.html
Copyright © 2011-2022 走看看