单链表逆置(就地逆序) C语言实现

LinkList.h

#ifndef LINKLIST_H #define LINKLIST_H typedef int ElemType; typedef struct LNode { ElemType *data; struct LNode *next; int length; }LNode, *LinkList; LinkList initList(); void insertList(LinkList l, ElemType *data, int sizeOfData); int length(LinkList l); void reverse(LinkList l); #endif  

 

LinkList.c

#include "LinkList.h" #include #include //************************************ // Method: initList // FullName: initList // Access: public // Returns: LinkList // Qualifier: //************************************ LinkList initList() { LinkList l = 0; l = (LinkList)malloc(sizeof(LNode)); if(l == NULL) return NULL; l->data = 0; l->next = NULL; l->length = 0; return l; } //************************************ // Method: insertList // FullName: insertList // Access: public // Returns: void // Qualifier: // Parameter: LinkList l // Parameter: ElemType * data // Parameter: int sizeOfData //************************************ void insertList(LinkList l, ElemType *data, int sizeOfData) { LNode *n = 0; if(l == NULL || data == NULL) return; n = (LNode *)malloc(sizeof(LNode)); if(n == NULL) return; n->data = (ElemType *)malloc(sizeof(ElemType)); if(n->data == NULL) { free(n->data); free(n); return; } memcpy(n->data, data, sizeOfData); n->next = l->next; l->next = n; l->length++; } //************************************ // Method: length // FullName: length // Access: public // Returns: int // Qualifier: // Parameter: LinkList l //************************************ int length(LinkList l) { if(l == NULL) return 0; return l->length; } //************************************ // Method: reverse // FullName: reverse // Access: public // Returns: void // Qualifier: // Parameter: LinkList l //************************************ void reverse(LinkList l) { LinkList p, q, r; if(l == NULL) return; p = l->next; q = p->next; //q为p下一个节点 while(q) { r = q->next; //r为q下一个节点 q->next = p; //指针回指 p = q; q = r; //p, q后移 *关键是对指针间赋值的理解* } l->next = p; } 

 

main.c

#include "LinkList.h" #include int main() { ElemType num1 = 1, num2 = 2, num3 = 3; LinkList l = initList(); LinkList l2 = initList(); insertList(l, &num1, sizeof(ElemType)); insertList(l, &num2, sizeof(ElemType)); insertList(l, &num3, sizeof(ElemType)); reverse(l); return 0; } 

你可能感兴趣的:(数据结构)