1.单向链表(创建,输出,倒序输出,转置)

    xiaoxiao2022-07-15  147

    1.创建:通过头尾指针创建一个单向链表 2.输出 3.倒序输出:递归 4.转置:用三个指针,一个被指向p1,一个指向p2,一个断开p3

    代码实现: #include<stdio.h> #include<stdlib.h> typedef struct node { int nValue; struct node* pNext; }List; //创建 List* CreateList() { printf("请输入节点个数:\n"); int num; scanf("%d",&num); List* pHead = NULL; List* pEnd = NULL; List* pTemp = NULL; int Value=0; printf("请输入节点内容:\n"); while(num) {

      //printf("请输入节点内容:\n");   scanf("%d",&Value);   //创建节点   pTemp = (List*)malloc(sizeof(List));   pTemp->nValue=Value;   pTemp->pNext=NULL;   if(pHead == NULL)   {    pHead = pTemp;    }   else//尾的下一个等于temp   {    pEnd->pNext = pTemp;    }   //尾移动到下一个   pEnd = pTemp;   num--;   } return pHead; } //输出 void PrintfList(List* pHead) { if(pHead == NULL)   return; printf("输出值:"); List* pTemp = pHead; while(pTemp) {   printf("%d",pTemp->nValue);   pTemp=pTemp->pNext;   } } //反向输出 void reversePrintf(List* pHead) { //递归 if(pHead == NULL)   return; reversePrintf(pHead->pNext); printf("%d",pHead->nValue); } //转置 List* ReverseList(List* pHead) { if(pHead == NULL || pHead->pNext == NULL)   return pHead; //三个指针一起移动 List* p1=NULL;//被指向(头->pNext) List* p2=NULL;//指向(头) List* p3=NULL;//断开 p2=pHead; p3=pHead->pNext; while(p3 != NULL) {   p2->pNext = p1;

      p1=p2;   p2=p3;   p3=p3->pNext;//为空说明到pEnd->pNext   } p2->pNext = p1; // 最后还需要把p2和p1连起来,此时p2指向pEnd,但是与p1为连接 return p2; } int main() { List* list = CreateList(); PrintfList(list); printf("\n"); reversePrintf(list); printf("\n"); list=ReverseList(list); printf("\n"); PrintfList(list);

     return 0; }

    最新回复(0)