本文主要是介绍带头结点的链表的逆置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
不需要申请新的内存,在原有的链表的基础上实现逆置链表
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>typedef struct link{char data;struct link * next;
}LinkList;LinkList * setList(); //初始化链表
void initList(LinkList * ); //初始化链表,给链表赋值
void show(LinkList * ); //输出所有元素
void Reverse(LinkList * L); //逆置链表int main (){LinkList * head = setList();initList(head);show(head);Reverse(head);show(head);system("pause");return 0;
}LinkList * setList (){LinkList * head = (LinkList *)malloc(sizeof(LinkList));head ->next = NULL;return head ;
}void initList (LinkList * s ){char ch ;LinkList * p = s;printf("输入元素: (#号结束) \n");while((ch = getchar()) != '#'){fflush(stdin);LinkList * temp = (LinkList *)malloc(sizeof(LinkList));temp ->data = ch ;temp ->next = p ->next ;p ->next = temp;p = p->next;}
}void show (LinkList * s){LinkList * p = s ->next ;printf("\n链表中的元素有: ");while(p != NULL){printf("%c ",p->data );p = p->next ;}putchar ('\n');
}
void Reverse(LinkList * L)
{LinkList * p ;LinkList * q ;p = L->next ;q = p;L->next = NULL; //断开头结点while (p!= NULL){q = p -> next ; //获取p的下一个节点的地址p->next = L->next; //将p节点插入到头结点L后面,p的后记节点指向L原有的节点L->next = p ; //p为头结点的第一个元素,头结点的后记节点指向pp = q ; //p指向下一个需要交换的节点}
}
这篇关于带头结点的链表的逆置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!