链表结构的反转(5)

链表结构反转的思想:

    将一个链表分为3部分,head(头部分),mid(中间部分),last(最后部分);

    反转前的顺序:head->mid->last;

    反转后的顺序:last->mid->head;

    因此,将last向head方向移动,head向last方向移动,最终使mid成为head的前结点,last成为mid的前结点。

    llink  inverllist(llink head)
   {
              llink mid,last;
              mid=NULL;                            //mid是head的前结点
              while(head!=NULL)
               {
                      last=mid;                      //last是mid的前结点
                      mid=head;
                      head=head->next;         //下一个结点
                      mid->next=last;            //mid指向前结点last
               }
               return mid;
 }

举例如下,

链表的反转

    
#include " stdio.h "
#include
" stdlib.h "
struct llist
{
int num;
struct llist * next;
};
typedef
struct llist node;
typedef node
* llink;
/* ------------链表的输出---------- */
void printllist( llink ptr)
{
while (ptr != NULL)
{
printf(
" [%d] " ,ptr -> num);
ptr
= ptr -> next;
}
printf(
" \n " );
}
/* --------链表的创建-------- */
llink createllist(
int * array , int len)
{
llink head;
llink ptr,ptr1;
int i;
/* ------创建第一个结点------ */
head
= (llink)malloc( sizeof (node));
if ( ! head)
return NULL;
head
-> num = array[ 0 ];
head
-> next = NULL;
ptr
= head;
for (i = 1 ;i < len;i ++ )
{
ptr1
= (llink)malloc( sizeof (node));
if ( ! ptr1)
return NULL;
ptr1
-> num = array[i];
ptr1
-> next = NULL;
ptr
-> next = ptr1;
ptr
= ptr -> next;
}
return head;
}
/* --------链表的反转------ */

llink inverllist(llink head)
{
llink mid,last;
mid
= NULL;
while (head != NULL)
{
last
= mid;
mid
= head;
head
= head -> next;
mid
-> next = last;
}
return mid;
}
/* -------链表的内存释放------- */
void freellist(llink head)
{
llink ptr;
while (head != NULL)
{
ptr
= head;
head
= head -> next;
free(ptr);
}
}

/* ------反转链表--------- */
int main()
{
int llist[ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 };
llink head;

head
= createllist(llist, 6 );
if ( ! head)
{
printf(
" 内存分配失败! \n " );
exit(
1 );
}
printf(
" 原来的链表: " );
printllist(head);
head
= inverllist(head);
printf(
" 反转后链表: " );
printllist(head);
freellist(head);

}

    

转载于:https://my.oschina.net/garyun/blog/602816

猜你喜欢

转载自blog.csdn.net/weixin_33943347/article/details/91773912