单链表逆置

来源:互联网 发布:韩国财团知乎 编辑:程序博客网 时间:2024/04/30 02:27

利用原结点空间逆置单链表

  1. 带头结点
  2. 不带头结点
#include <stdio.h>#include <stdlib.h>typedef struct Node_{    int data;    struct Node_ * next;}Node, * List;void PrintList( List L ){    /* suppose no header */    while( L != NULL ){        printf( "%d\t", L->data );        L = L->next;    }}void ReverseList1( List L ){    /*       reverse the list Head with a header        利用栈的思想,将元素依次入栈,便能反转       依次分离结点,再使用头插法可以达到相同的效果       注意头插法不需要有头结点     */    List P = NULL;    while( L->next != NULL ){        List S = L->next;        L->next = S->next;        S->next = P;        P = S;    }    L->next = P;}void ReverseList2( List * L ){    /* suppose no header */    List P = NULL;    List S;    while( *L != NULL ){        S = *L;        *L = S->next;        S->next = P;        P = S;    }    *L = P;}int main(){    List Head = (List)malloc( sizeof( Node ) );    Head->next = NULL;    /* initialize  list */    for( int i = 1; i < 10; i++ ){        List S = (List)malloc( sizeof( Node ) );        S->data = i;        S->next = Head->next;        Head->next = S;    }    PrintList( Head->next );    ReverseList1( Head );    printf( "\n" );    PrintList( Head->next );    List Temp = Head->next;     free( Head );    Head = Temp;    ReverseList2( &Head );    PrintList( Head );    return 0;}
原创粉丝点击