c语言-单向链表
2016-09-02 16:45
381 查看
#define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "stdlib.h" #include "string.h" typedef struct Node { int data; struct Node *pNext; }sList; //创建链表 int createList(sList *list) { sList *pM, *pCur; if (list == NULL) { printf("error parameter list"); return -1; } pCur = list; printf("\nplease enter you data '-1' is end!\n"); fscanf(stdin, "%d", &(pCur->data)); while (pCur->data != -1) { pM = (sList*)malloc(sizeof(sList)); if (pM == NULL) { printf("error parameter pM"); return -2; } pCur->pNext = pM; pCur = pM; printf("\nplease enter you data '-1' is end!\n"); fscanf(stdin, "%d", &(pCur->data)); } pCur->pNext = NULL; return 0; } //遍历链表 int showList(sList *list) { if (list == NULL) { printf("error parameter list"); return -1; } sList *tmp = list; while (tmp != NULL) { printf("lsit:%d\n", tmp->data); tmp = tmp->pNext; } return 0; } //插入结点 int insertList(sList *list, int seat, int data) { if (list == NULL) { printf("error parameter list"); return -1; } sList *pCur = list; while (pCur && --seat) { pCur = pCur->pNext; } sList *pM = (sList*)malloc(sizeof(sList)); if (pM == NULL) { printf("error parameter pM"); return -2; } pM->data = data; pM->pNext = pCur->pNext; pCur->pNext = pM; return 0; } //删除节点 int deleteNode(sList *list, int seat) { sList *pCur = list; sList *pDel; while (pCur&&--seat) { pCur = pCur->pNext; } pDel = pCur->pNext; pCur->pNext = pDel->pNext; free(pDel); return 0; } //销毁链表 int deleteList(sList *list) { return 0; } //逆置链表(首节点不逆) int inverseList(sList *list) { if (list == NULL) { printf("error parameter list"); return -1; } sList *pHead=NULL; sList *pPre=NULL; sList *pCur=NULL; sList *pNext=NULL; pHead = list; if (pHead->pNext == NULL) { return 0; } if (pHead->pNext->pNext == NULL) { return 0; } pPre = pHead->pNext; pCur = pPre->pNext; while (pCur) { pNext = pCur->pNext; p c7fe Cur->pNext = pPre; pPre = pCur; pCur = pNext; } pHead->pNext->pNext = NULL; pHead->pNext = pPre; return 0; } int mainzzweq() { int ret = 0; sList *mylist = (sList*)malloc(sizeof(sList)); ret = createList(mylist); if (ret != 0) { printf("func createList() failure"); return -1; } ret = showList(mylist); if (ret != 0) { printf("func showList() failure"); return -1; } ret = insertList(mylist, 2, 555); if (ret != 0) { printf("func showList() failure"); return -1; } ret = showList(mylist); if (ret != 0) { printf("func showList() failure"); return -1; } ret = deleteNode(mylist,2); ret = showList(mylist); ret = inverseList(mylist); ret = showList(mylist); return 0; }