单链表逆转

来源:互联网 发布:辐射4美女捏脸数据教程 编辑:程序博客网 时间:2024/06/08 11:11
typedef int ElementType;typedef struct Node *PtrToNode;struct Node {  ElementType Data;  PtrToNode   Next;};typedef PtrToNode List;

注意:这里的单链表没有头结点

方法1:新建一个链表P,遍历原链表L,依次添加到P中(类似于用链表来构造堆栈)

List Reverse(List L)  /*对原链表无影响*/{    List P,t;    if(L == NULL)        return NULL;    P = (struct Node*)malloc(sizeof(struct Node));    P->Next = NULL;    while(L != NULL)   {       t = (struct Node*)malloc(sizeof(struct Node));       t->Data = L->Data;       t->Next = P->Next;       P->Next = t;       L = L->Next;     }t = P;P = P->Next;free(t);return P;}
方法2:

List Reverse(List L) /*对原链表有影响*/{List P,t;P = L;if(P != NULL){           t = P;           P = P->Next;           t->Next = NULL;        }        while(P != NULL)        {           t = P;           P = P->Next;           t->Next = L;   L = t;}return L;}
方法3:递归

List Reverse(List L){if(L == NULL || L->Next == NULL){return L;}else{ List L1 = Reverse(L->Next);         L->Next->Next = L; L->Next = NULL;   return L1;    }}



0 0