本文共 2573 字,大约阅读时间需要 8 分钟。
// 单链表.cpp : 单链表的相关操作(两种方法的建立、两种方法的查询、求长、打印、插入、删除、逆序反转)。#include "stdafx.h"#includeusing namespace std;typedef struct node{ char data; struct node *next;}ListNode;typedef ListNode * LinkList;bool isvalue=true;LinkList creatListF(void)//头插入法{ LinkList head=NULL; ListNode *s; char ch; cout<<"请输入字符串并回车,则头插入法形成的单链表如下:"< data=ch; s->next=head; head=s;//head要不断向前移动,一直指着最前线,这样存储的数据与输入的数据顺序相反 ch=getchar(); } return head;}LinkList creatListR(void)//尾插入法{ LinkList head=NULL,r=NULL;//在创建时,要将head设置为NULL,否则内存出错;LinkList head这样声明只是指向一个未知的值 ListNode *s; cout<<"请输入字符串并回车,则尾插入法形成的单链表如下:"< data=ch; if(head==NULL) head=s;//新结点插入空表 else r->next=s;//如果是头结点,不执行这一步,头结点特别处理 r=s;//将指针r后移,使其一直指向最后一个结点 if(r!=NULL) r->next=NULL;//对于非空表,将尾结点指针域置空,防止内存读写错误 ch=getchar(); } /*while(cin>>ch) { s=new ListNode(); if(s==NULL) return 0; s->data=ch; if(head==NULL) head=s; else r->next=s; r=s; if(r->next!=NULL) r->next=NULL; }*/ return head;}ListNode GetNodeByPos(LinkList head,int pos){ int i=1; while(head&&i next; i++; } if(i==pos) return *head;}ListNode GetNodeByKey(LinkList head,char key){ while(head&&(head->data)!=key) head=head->next; if(head&&head->data==key) return *head;}void print(LinkList head){ while(head!=NULL) { cout< data; head=head->next; if(head!=NULL) cout<<"——> "; } cout< next; len++; } return len; }void DeleteNode(LinkList &head,char value){ ListNode *ptemp,*qtemp,*current=head; while(current) { ptemp=current->next; if(current->data==value)//第一种情况:头指针所包含的数据恰好符合要求 { qtemp=current; current=current->next;//头指针下移一个数据 free(qtemp);//原先的头指针删掉 isvalue=false; } else { if(ptemp!=NULL&&ptemp->data==value) { current->next=ptemp->next; free(ptemp); isvalue=false; } else current=current->next; } } if(isvalue) cout< <<"不在单链表中"< data=value; cout<<"请输入插入方式:0——头部;1——尾部;2——中间。"< >pos; if(pos==2) { cout<<"请输入要出入的位置(插入字符位于该位置的后面):"; cin>>tag; } switch(pos) { case 0: newNode->next=head; head=newNode; break; case 1: ptemp=head; while(ptemp->next!=NULL) ptemp=ptemp->next; ptemp->next=newNode; newNode->next=NULL; break; case 2: ptemp=head; while(index next; } if(index!=tag) exit(-1); newNode->next=ptemp->next; ptemp->next=newNode; break; default: cout<<"输入的出入方式不合法。"< next; while(p2!=NULL) { p3=p2->next; p2->next=p1; p1=p2; p2=p3; } head->next=NULL; head=p1;}int _tmain(int argc, _TCHAR* argv[]){ /*LinkList head=creatListF();*/ LinkList head=creatListR(); print(head); /*ListNode node=GetNodeByPos(head,2); cout<<"在单链表中按位置查找:"< <
部分内容参考自下面两个网站,在此表示感谢:
转载地址:http://gbsvi.baihongyu.com/