链表C++实现插入、删除元素,链表逆序
2011-01-01 18:31
477 查看
#include <iostream> #include <stdio.h> #include <stdlib.h> #define OVERFLOW -1 #define ERROR 0 #define OK 1 typedef struct LinkList { int data; LinkList *next; }LinkList; class LinklistOp { private:LinkList *list;//list为单链表的头结点 public: LinklistOp() { //if(this->list==NULL) this->list=(LinkList *)malloc(sizeof(LinkList)); this->list->next=NULL; } int LocationElm(int i,int &e)//在单链表中查找第i个结点,如果存在用e返回其值,否则报错处理 { LinkList *p=this->list->next; int j=1; while(j<i&&p!=NULL) { p=p->next; } if(p==NULL||j>i) { return ERROR; } e=p->data; return e; } //在单链表中插入一个节点 int ListInsert(int i,int e) { LinkList *s; LinkList *p=this->list; int j=0; while(j<i-1&&p!=NULL) { p=p->next; j++; } if(p==NULL||j>i-1)return ERROR; s=(LinkList *)malloc(sizeof(LinkList)); s->next=NULL; if(s==NULL)exit(OVERFLOW); s->data=e; s->next=p->next; p->next=s; //p->next=NULL; return OK; } //在单链表中删除一个结点 int ListDelete(int i,int &e) { LinkList *p,*q=list; int j=0; while(p->next!=NULL&&j<i-1) { p=p->next; j++; } if(p->next==NULL||j>i-1)return ERROR; q=p->next; p->next=q->next; free(q); return OK; } void PrintItem() { LinkList *p=this->list->next; while(p!=NULL) { printf("%d",p->data); p=p->next; } } void ReverseList() { LinkList *p=this->list->next; LinkList *q=p->next; p->next=NULL; while(q)//利用指针对链表进行截断重组,并且头指针也在移动 { p=q;// p现在指向q所指向的节点,也就是 p指向 B q=q->next;//q指向q的下一个节点 也就是C (如果没有,即为NULL) p->next=this->list->next;//p的下一个节点指向l的下一个节点 l->next => A,p => B 所以就是B指向A this->list->next=p;//l => head ,头结点的下一个节点指向p 也就是说 head指向B,一次循环结束以后 // head--B--A-- q指向的是C,如果 } } }; void main() { //LinkList *h=(LinkList *)malloc(sizeof(LinkList)); //h->data=NULL; LinklistOp *list=new LinklistOp(); int a[]={1,2,3}; for(int i=1;i<=3;i++) { list->ListInsert(i,a[i-1]); } printf("反转前的链表:"); list->PrintItem(); list->ReverseList(); printf("/n"); printf("反转后的链表:"); list->PrintItem(); }
相关文章推荐
- 队列用链表实现(建立,插入新元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空)
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- 利用线性链表实现 初始化、插入数据、查看数据、删除数据、链表逆序、清除和销毁数据链表的功能
- 队列用链表实现(建立,插入新元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空)
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- 数据结构Java实现03----单向链表的插入和删除
- 线性表之<链表linklist>的储存及插入、删除-C代码实现
- C语言实现链表的创建,初始化,插入,删除,查找
- 数据结构 P38 算法实现 在带头结点的单链表的第i个元素插入元素e
- 关于链表结构的基本操作 c 实现 (创建,插入删除,反转,合并链表,查找,是否有环,链表相交情况)
- PHP实现双链表删除与插入节点的方法示例
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- 链表(LinkList)的设计与实现(初始化,创建,插入,删除,逆置)
- 实现单链表创建、插入、删除、打印功能
- 链表的创建、测长、排序、插入、逆序的实现(C语言)
- C++实现链表的创建、插入、删除