曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4883|回复: 0
打印 上一主题 下一主题

[链表] 链表反转

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2009-7-27 21:36:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
code:
#include <stdio.h>
#include <stdlib.h>

struct llist {
    int num;
    struct llist *next;
};
typedef struct llist node;
typedef node   *llink;

/*-----------*/
/*  链表输出 */
/*-----------*/
void printllist(llink ptr)
{
    while (ptr != NULL) {
        printf("[%d]", ptr->num);
        ptr = ptr->next;
    }

    printf("\n");
}


/*-----------*/
/*  链表创建 */
/*-----------*/
llink createllist(int *array, int len)
{
    llink head;                /*链表开始指针*/
    llink ptr, ptr1;
    int i;
   
    /*创建第一个结点*/
    head = (llink) malloc(sizeof(node));
    if (!head)                 /*检查指针*/
      return NULL;
   
    head->num = array[0];            /*创建结点内容*/
    head->next = NULL;            /*设置指针初值*/
    ptr = head;                /*ptr指向链表开始*/
    for (i = 1; i < len; i++) {        /*创建其它结点循环*/
        ptr1 = (llink)malloc(sizeof(node));
        if (!ptr1)
          return NULL;
        ptr1->num = array[i];        /*创建结点内容*/
        ptr1->next = NULL;        /*设置指针初值*/
        ptr->next = ptr1;        /*连接结点*/
        ptr = ptr->next;        /*指向下一结点*/
    }
    return head;
}

/*-----------*/
/*链表的反转 */
/*-----------*/
llink invertllist(llink head)
{
    llink mid, last;
    mid = NULL;
    while ( head != NULL ) {
        last = mid;
        mid = head;
        head = head->next;
        mid->next = last;
    }
    return mid;
}

/*-------------*/
/*链表内存释放 */
/*-------------*/
void freellist(llink head)
{
    llink ptr;
    while( head != NULL) {
        ptr = head;
        head = head->next;
        free(ptr);
    }
}
int main(void)
{
    int llist1[6] = {1, 2, 3, 4, 5, 6};    /*数组内容*/
    llink head;                /*指向链表开始*/
   
    head = createllist(llist1, 6);
    if (!head) {
        printf("内存分配失败! \n");
        exit(1);
    }
    printf("原来的链表: ");
    printllist(head);
    head = invertllist(head);
    printf("反转后的链表: ");
    printllist(head);
    freellist(head);
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 23:10 , Processed in 0.086840 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表