单链表---逆置---经典

来源:互联网 发布:js拆分字符串 编辑:程序博客网 时间:2024/05/18 00:29

在单链表这块其实不是很难,但是有的问题是很经典,这里关于经典的逆置我有5中方法,大家可以参考:

      1.有两个指针一个指向头,一个指向尾。再取一个中间变量tmp ,只换data值就可以(次数控制好,是总长的一半)

       2.再开辟一个单链表,直接进行尾删,尾插。(次数是总长)

       3.在一个单链表中进行。尾删,中间插。

       4.与第三个大致相同,头删中间插。

       5.

       .

        

其实:我大致就只能想到这里,还有一个想法写不出来!以后会自己考虑:

现在看看代码:

   1.

bool rev_link_list(NODE *phead){NODE *p = phead;NODE *s = phead;NODE *r = phead;if(phead == NULL || is_empty(phead)){return false;}elem_type tmp;for(int i = 0;i < get_length(phead); i++){p = p->next;}s = p;p = phead->next;for(int i = 0;i < (int) get_length(phead) / 2; i ++){tmp = p->data;p->data = s->data;s->data = tmp;r = p->next;p = phead;for(int j = 0;j < get_length(phead)-1-i; j++){p = p->next;}s = p;p = r;}return true;}
  2.
NODE * rev_link_list_a(NODE *phead){elem_type tmp;NODE *p = phead->next;NODE *pheadA = init_link_list_ex();if(phead == NULL || is_empty(phead)){returnNULL;}for(int j = 0;j < get_length(phead); j++){insert_head(pheadA,p->data);p = p->next;}return pheadA;}
3.

bool rev_link_list_b(NODE *phead){elem_type e;int pos = 0;if(phead == NULL || is_empty(phead)){return false;}for(int j = 0;j < get_length(phead); j++){delete_tail(phead,&e);insert(phead,pos,e);pos ++;}return true;}
4.
bool rev_link_list_c(NODE *phead){elem_type e;int pos = get_length(phead) - 1;if(phead == NULL || is_empty(phead)){return false;}for(int j = 0;j < get_length(phead); j++){delete_head(phead,&e);insert(phead,pos,e);pos -- ;}return true;}
5.

NODE * rev_link_list_d(NODE *phead){NODE *p = phead;NODE *s = phead;if(phead == NULL || is_empty(phead)){return NULL;}if(phead->next && phead->next->next){p = phead->next;s = p->next;p->next = NULL;while(s){p = s;s = s->next;p->next =phead->next;phead->next = p;}}return phead;}
结果就不显示了,就是逆置。期待地六种方法!



0 0
原创粉丝点击