首页 > 代码库 > C++中实现链表的删除和颠倒【1234ssc.com】
C++中实现链表的删除和颠倒【1234ssc.com】
MFC工程中关于链表的操作
1.对于给定的整数n,编写算法删除链表中第n个节点,该链表的第一个节点由first指向。
由于C++中没有关于node的标准头文件,要先手动定义node类,此处只定义了简单的data和next指针以及析构函数部分的内容:
1 class node 2 {3 public:4 node(const int &in,node *nextnode = NULL);5 virtual ~node();6 node*next;7 int data;8 9 };
#include"node.h"之后就可以定义节点了。
1 node *p1,*p2,*p3;2 p1=new node(1);3 p2=new node(2,p1);4 p3=new node(3,p2);
此处定义出的链表 图示如下:
p3-->p2-->p1
3 -->2 -->1
关于eraseValue函数的定义:
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
帝尊信誉平台【Q:737888396】
1 template <typename T> 2 void eraseValue(node*first,const T&n) 3 { 4 node *curr=first,*pre=NULL; 5 if(n==1) 6 { 7 first=first->next; 8 delete curr; 9 }10 else {for(int i=1;i<n;i++)11 {12 pre=curr;13 curr=curr->next;14 }15 16 pre->next=curr->next;17 delete curr;}18 19 }
函数调用及输出(改):
当n=1时会报错,有待解决。
1 node *cur=p3; 2 eraseValue(p3,2); 3 CString temp,str; 4 while(cur->data!=NULL) 5 { 6 temp.Format("%d ",cur->data); 7 str+=temp; 8 cur=cur->next; 9 }10 AfxMessageBox(str);
2.编写一个算法来颠倒链表,不要复制链表元素,而是重置链接和指针,使得first指向原来的最后一个节点,且节点之间所有链接都反向。
未经输出测试:
1 template <typename T> 2 void reverse(node*first,const T&n) 3 { 4 node *front=NULL; 5 for(int i=0;i<n-1;i++) 6 { 7 node *curr=first,*pre=NULL; 8 while(curr->next!=NULL) 9 {10 pre=curr;11 curr=curr->next;12 13 }14 if(i==0&&curr->next==NULL) front=curr;15 pre->next=NULL;16 curr->next=pre;17 }18 if(i=n-1) first->next=front;19 front=first;20 }
初学c++和数据结构,有错误请尽管指出,感激不尽!!
C++中实现链表的删除和颠倒【1234ssc.com】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。