首页 > 代码库 > 单链表操作问题,主要是逆操作

单链表操作问题,主要是逆操作

工作无事,搞其它事也不太方便,写点简单代码。本来想写的高大上一些,发现用范型不是一点代码的事,还是算了。

#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 intT * 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;}

单链表的逆操作问题我用了两种方法,感觉第一种方法不太占优势。不过比较好理解。第二种就是常规方法了。

我这种方法是用了头指针的链表,如果没有头指针,要注意的地方是,逆操作要传指针的地址(或者返回第一个元素的地址)。当然,换成全局变量也是可以的。

有问题请指正 。(这些年工作没太大学习动力,与没人分享和讨论也有点关系)

单链表操作问题,主要是逆操作