【数据结构】-线性表-链表 熟练度max=3(不建立新节点,使链表L倒序)

来源:互联网 发布:张艺谋奥运会知乎 编辑:程序博客网 时间:2024/05/02 06:11

要求不建立新节点,使链表L倒序

反转前:

1 2 3 4 5 6 7 8 9 10

反转后:

10 9 8 7 6 5 4 3 2 1


#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct LNode{    int data;    struct LNode *next;}LNode;void saveListnext(LNode *&L,int x[])//尾插{    L = (LNode *)malloc (sizeof(LNode));    L->next=NULL;    LNode *q,*s;    q=L;    for(int i=0;i<10;i++)    {        s=(LNode *)malloc (sizeof(LNode));        s->data = x[i];        q->next=s;        q=q->next;    }    q->next=NULL;}void printList(LNode *L)//输出{    LNode *q;    q=L->next;    int i=0;    while(q!=NULL)    {        if(i++)        {            putchar(' ');        }        printf("%d",q->data);        q=q->next;    }    printf("\n");}void reverseList(LNode *&L)//头插即可反转{    LNode *q,*s;    q=L->next;//必须指向L的下一个节点,否则下一步L->next=NULL会让q变成空表    L->next=NULL;    while(q!=NULL)    {        s=q->next;//一定要放在第一句,不能放在倒数第二句,因为头插之后,q的位置发生了变化,s不是指向期望的值        q->next=L->next;        L->next=q;        //s=q->next;        q=s;    }}int main(void){    LNode *L;    int x[10]={1,2,3,4,5,6,7,8,9,10};    saveListnext(L,x);    printf("反转前:\n");    printList(L);    printf("反转后:\n");    reverseList(L);    printList(L);    return 0;}
0 0
原创粉丝点击