将链表中所有节点的链接方向“原地”逆转

将链表中所有节点的链接方向“原地”逆转

#include<stdio.h>
#include<stdlib.h>
#define N 10
typedef int SLTDateType;
typedef struct Node//定义单链表节点
{
    
    
    SLTDateType date;
    struct Node *next;
}Node,*LinkList;
SLTDateType LinkList_Init(LinkList &L)
{
    
    
    L=(LinkList)malloc(sizeof(Node));
    if(L==NULL)
        exit(-1);
    L->next=NULL;
    return 1;
}
void LinkList_createR(LinkList L,int n)
{
    
    
    int i;
    Node *p,*r;
    r=L;
    printf("输入%d个数据:   ",n);
    for(i=0;i<n;i++)
    {
    
    
        p=(LinkList)malloc(sizeof(Node));
        scanf("%d",&p->date);
        p->next=NULL;
        r->next=p;
        r=p;
    }
}
void LinkList_print(LinkList L)
{
    
    
   Node *p;
   p=L->next;
   while(p)
   {
    
    
       printf("%d ",p->date);
       p=p->next;
   }
   printf("\n");
}
LinkList LinkList_turnList(LinkList &L)
{
    
    
   LinkList p,q,r;
   p=L->next;
   q=L->next->next;
   r=L->next->next->next;
   while(r)
   {
    
    
       q->next=p;
       p=q;
       q=r;
       r=r->next;
   }
   r=q;
   q->next=p;
   L->next->next=NULL;
   L->next=r;
   return L;
}
int main()
{
    
    
    LinkList L;
    int i;
    int n=N;
    //初始化单链表
    LinkList_Init(L);
    //输入单链表中的元素
    LinkList_createR(L,N);
    //输出单链表中的元素
    printf("单链表中的元素  ");
    LinkList_print(L);
    L=LinkList_turnList(L);
    printf("逆转后的元素为:");
    LinkList_print(L);//验证结果
    return 0;
}

输出结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_52988578/article/details/115331029
今日推荐