程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中實現鏈表的刪除和顛倒

C++中實現鏈表的刪除和顛倒

編輯:C++入門知識

C++中實現鏈表的刪除和顛倒


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函數的定義:   復制代碼  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 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved