链表基本操作及其反转

来源:互联网 发布:ubuntu查看jdk路径 编辑:程序博客网 时间:2024/05/21 17:58

链表结点声明、建立、打印及反转。

#include <iostream>#include <cstdlib>using namespace std;//链表结点结构体typedef struct LinklistNode{char data;struct LinklistNode* next;}LNode;//链表创建函数,参数为链表头结点和将要插入链表末尾的值,返回链表头结点LNode* creatLinklist(LNode* &head, char val){if(head==NULL){LNode* head=new LNode;head->data=val;head->next=NULL;return head;}else{LNode* flag=head;while(flag->next!=NULL){flag=flag->next;}LNode* last=new LNode;last->data=val;last->next=NULL;flag->next=last;return head;}}//打印链表void printLinklist(LNode* head){if(head==NULL) return;LNode* flag=head;while(flag!=NULL){cout<<flag->data<<endl;flag=flag->next;}return;}//链表反转,参数与返回值皆为链表头结点LNode* reverseLinklist(LNode* head){if(head==NULL||head->next==NULL) return head;LNode* p0=head;LNode* p1=p0->next;LNode* p2=p0->next->next;while(p2!=NULL){p1->next=p0;p0=p1;p1=p2;p2=p2->next;}p1->next=p0;head->next=NULL;return p1;}//主函数int main(){LNode*head=NULL;head=creatLinklist(head, 'a');head=creatLinklist(head, 'b');head=creatLinklist(head, 'c');head=creatLinklist(head, 'd');head=creatLinklist(head, 'e');head=creatLinklist(head, 'f');head=creatLinklist(head, 'g');head=creatLinklist(head, 'h');head=creatLinklist(head, 'i');printLinklist(head);LNode* reversedList=reverseLinklist(head);cout<<"Then reverse the linklist:"<<endl;printLinklist(reversedList);system("Pause");return 0;}


0 0
原创粉丝点击