标签: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