dota吧 关注:4,646,606贴子:155,328,541
  • 3回复贴,共1

编写一个程序实现循环单链表的复制和逆置的功能

只看楼主收藏回复

RT
各位大神帮个忙哈,我们的上机实验课作业。


1楼2010-03-04 12:33回复
    • 222.171.7.*
    #include <stdio.h>
    #include <malloc.h>
    #define MAX_LEN 10
    typedef struct _LINKNODE
    {
    int value;
    struct _LINKNODE* next;
    }LINKNODE;
    void copyLink(LINKNODE** destLink, LINKNODE* sourceLink)
    {
    if(sourceLink == NULL)
    {
    destLink = NULL;
    return;
    }
    int count = 0;
    LINKNODE* tempSource = sourceLink;
    LINKNODE* curNode = NULL;
    LINKNODE* temp = NULL;
    while(count < MAX_LEN)
    {
    curNode = (LINKNODE*)malloc(sizeof(LINKNODE));
    curNode->value = tempSource->value;
    if(*destLink == NULL)
    {
    *destLink = curNode;
    temp = *destLink;
    }
    else
    {
    temp ->next = curNode;
    temp = temp ->next;
    }
    tempSource = tempSource->next;
    count++;
    }
    temp->next = sourceLink;
    }
    LINKNODE* revertLink(LINKNODE* sourceLink)
    {
    LINKNODE* result = NULL;
    if(sourceLink != NULL)
    {
    int count = 0;
    LINKNODE* temp = NULL;
    while(count++ < MAX_LEN)
    {
    temp = sourceLink->next;
    sourceLink->next = result;
    result = sourceLink;
    sourceLink = temp;
    }
    }
    return result;
    }
    void freeLink(LINKNODE* head)
    {
    int count = 0;
    LINKNODE* temp = NULL;
    if(head != NULL)
    {
    while(count++ < MAX_LEN)
    {
    temp = head;
    head = head->next;
    free(temp);
    }
    head = NULL;
    }
    }
    void main()
    {
    int value[MAX_LEN] = {2, 4, 5, 6, 7, 8, 9, 0, 6, 1};
    LINKNODE* head = NULL;
    LINKNODE* curNode = NULL;
    LINKNODE* copyLink1 = NULL;
    LINKNODE* tempCur = NULL;
    for(int i=0; i<MAX_LEN; i++)
    {
    curNode = (LINKNODE*)malloc(sizeof(LINKNODE));
    curNode->value = value[i];
    curNode->next = NULL;
    if(head == NULL)
    {
    head = curNode;
    tempCur = head;
    }
    else
    {
    tempCur->next = curNode;
    tempCur = tempCur->next;
    }
    }
    tempCur->next = head;
    copyLink(&copyLink1, head);
    tempCur = copyLink1;
    i = 0;
    printf("新的复制后的链表是: ");
    while(i < MAX_LEN)
    {
    printf(" %d ", tempCur->value);
    tempCur = tempCur->next;
    i++;
    }
    printf("\n");
    head = revertLink(head);
    tempCur = head;
    printf("逆置后的链表是: ");
    i = 0;
    while(i < MAX_LEN)
    {
    printf(" %d ", tempCur->value);
    tempCur = tempCur->next;
    i++;
    }
    printf("\n");
    freeLink(copyLink1);
    freeLink(head);
    }
    


    2楼2010-03-11 10:48
    回复
      2025-08-23 22:14:01
      广告
      不感兴趣
      开通SVIP免广告
      写不来了....也


      4楼2010-03-11 10:50
      回复