/* ============================================================================ Name : LinklistReverse.c Author : 齐保元 Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */ #include <stdio.h> #include <stdlib.h> #include <assert.h> /** * 输入一个链表的头结点,从尾到头反过来输出每个结点的值 */ typedef void* LinkNodeValue; typedef struct LinkNode { LinkNodeValue m_nKey; struct LinkNode *m_pNext; } LinkNode, *LinkList; void PrintLinkListReverse(LinkList linkList) { assert(linkList != NULL); if (linkList->m_pNext != NULL) { PrintLinkListReverse(linkList->m_pNext); } printf("%d/t", (int) *(int*) linkList->m_nKey); } /** * create a new linkList */ LinkList createLinkList() { LinkList linkList = (LinkList) malloc(sizeof(LinkNode)); if (linkList == NULL) { return NULL; } linkList->m_pNext = NULL; int numb = -1; linkList->m_nKey = &numb; return linkList; } /** * append elements into the linkList */ void linkListAppend(LinkList linkList, LinkNodeValue value) { assert(linkList!=NULL); while (linkList->m_pNext != NULL) {//TO THE TAIL linkList = linkList->m_pNext; } LinkList node = (LinkList) malloc(sizeof(LinkNode)); node->m_nKey = value; node->m_pNext = NULL; linkList->m_pNext = node; } void dump(LinkList linkList) { assert(linkList!=NULL); while (linkList != NULL) { printf("%d/t", (int) *(int*) linkList->m_nKey); linkList = linkList->m_pNext; } } int main(void) { LinkList linkList = createLinkList(); int k[] = { 1, 3, 4, 5, 6, 7, 8, 9 }; int index = 0; for (index = 0; index < sizeof(k) / sizeof(k[0]); index++) { linkListAppend(linkList, &k[index]); } dump(linkList); printf("/n"); PrintLinkListReverse(linkList); return EXIT_SUCCESS; }