标签:blog io ar for div 问题 log 代码 ad
工作无事,搞其它事也不太方便,写点简单代码。本来想写的高大上一些,发现用范型不是一点代码的事,还是算了。
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct list { int val; struct list *next; }Node_def; #define NODE_SIZE (sizeof(Node_def)) #undef T #define T Node_def #define T1 int T * Node_insert(T *head, T1 val) { if ( NULL == head) { return NULL; } T *p = (T*)malloc(NODE_SIZE); p->val = val; p->next = head->next; head->next = p; head->val++; return p; } T * Node_new() { T *p = (T*)malloc(NODE_SIZE); p->next = NULL; p->val = 0; return p; } void Node_print(T *head) { if(!head) { printf("NULL\n"); return ; } printf("num of list is [%d]:\n", head->val); if(head->val == 0) return ; int i = 0; Node_def *p = head->next; while(p) { printf("[% 6d]", p->val); p = p->next; if(i++ == 10) { printf("\n"); i = 0; } } printf("\n"); } void Node_free(T *head) { if(!head) return ; printf("num of list for free is [%d]:\n", head->val); if(head->val <= 0) return; T *p = head->next; T *pp; while(p) { pp = p; p = p->next ; //printf("[% 6d] ", pp->val); free(pp); } free(head); printf("\n"); } void Node_inverse( T *head ) { #if 0 if(!head) return ; if(head->val <= 0) return ; int num = head->val; int i; T1 *arr = (T1*)malloc(num); if(!arr) exit(0) ; i = 0; T *p = head->next; while(p) { arr[i++] = p->val; p = p->next; } for ( i = num-1 , p = head->next; i >= 0 ; i-- ) { p->val = arr[i]; p = p->next; } #else if(!head) return ; if(head->val <= 0) return ; int num = head->val; T *p = head->next; T *pp = p->next; p->next = NULL; head->next = p; while (pp) { p = pp; pp = pp->next; p->next = head->next; head->next = p; } #endif printf("inserve success\n"); } int main() { T *head = Node_new(); int i = 0; for ( i = 0 ; i < 1000; i ++) Node_insert(head, i); Node_print(head); Node_inverse(head); Node_print(head); Node_free(head); return 0; }
单链表的逆操作问题我用了两种方法,感觉第一种方法不太占优势。不过比较好理解。第二种就是常规方法了。
我这种方法是用了头指针的链表,如果没有头指针,要注意的地方是,逆操作要传指针的地址(或者返回第一个元素的地址)。当然,换成全局变量也是可以的。
有问题请指正 。(这些年工作没太大学习动力,与没人分享和讨论也有点关系)
标签:blog io ar for div 问题 log 代码 ad
原文地址:http://www.cnblogs.com/boota/p/4054686.html