.編寫一個程序,有單鏈表的節點類型如下:typedef struct node{ int no; struct node *next;}node;設計如下函數:void create(Node *h):建立不帶頭節點的單鏈表hint len(Node *h):返回不帶頭節點的單鏈表h的長度void del(Node *h,int i):刪除不帶頭節點的單鏈表h的第i個節點void disp(Node *h):輸出不帶頭節點的單鏈表h的所有節點值其中:main函數如下:void main(){ Node *head; int i; create(head); disp(head); cout<<"鏈表長度:" <<len(head)<<endl; cout<<"刪除第幾個節點:"; cin>>i; del(head,i); disp(head);}
熱心網友
題目有點爛。 head沒有任何值的時候就使用它是不合理的,所以我改了一下,把 Node * head; 改成了Node *head=new Node; 在VC下,如果 head不指向任何值,把它做為參數是沒有意義的。#include typedef struct node{int no;struct node *next;}Node; /*把node改成了Node*/void create(Node *h){ int i;static Node *current; h-no=1; h-next=0; current=h;for(i=2;ino=i; temp-next=0; current=current-next=temp;}}int len(Node *h){ int count=0; Node *current=h; while(current!=0){ count++; current=current-next;}return count;}void disp(Node *h){ Node *current=h; while(current!=0){ coutnonext; } coutlen(h)) return;if(--i){while(--i) current=current-next;temp=current-next;current-next=temp-next;delete temp;}else{ temp=h; h=h-next; delete temp;}}void main(){Node *head=new Node;int i;create(head);disp(head);couti;del(head,i);disp(head);}。
熱心網友
由于要在函數中改變實參的值,以下函數的參數略有改變,聲明了引用類型:void create(Node *h); //樓主的聲明void create(Node *&h , int maxno); //修改后的聲明void del(Node *h,int i); //樓主的聲明void del(Node *&h,int i); //修改后的聲明另外,對于create()還增加了一個參數:maxno,作用是指定鏈表節點的no成員的值。指定一個maxno后,創建出來的鏈表包含0~maxno之間所有整數的節點(max=0,否則會創建空鏈表)。由于沒有裝vc,以下程序在tc++3,0下調試通過://list。cpp#include #include typedef struct node{ int no; struct node *next;} Node;void create(Node *&h , int maxno); //建立不帶頭節點的單鏈表h,參數有所改動int len(Node *h); //返回不帶頭節點的單鏈表h的長度void del(Node *&h,int i); //刪除不帶頭節點的單鏈表h的第i個節點(i從0起計算),參數有所改動void disp(Node *h); //輸出不帶頭節點的單鏈表h的所有節點值void main(){ Node *head; int i; create(head,3); count i; del(head,i); disp(head);}void create(Node *&h , int maxno){ Node *p; int i; if (maxno = 0) //創建第一個節點 { p = (Node *)malloc(sizeof(Node)); p-no = 0; h = p; } else { h = NULL; //參數表中聲明h為Node指針的引用類型,所以可以通過形參改變實參的值 return ; } for(i=1 ; inext = (Node *)malloc(sizeof(Node)); p-next-no = i; p = p-next; } p-next = NULL;}int len(Node *h){ int lencount = 0; while(h) { lencount++; h = h-next; //參數表中h沒有被聲明為引用類型,改變h的值不會改變實參的值 } return lencount;}void del(Node *&h,int i){ int j; Node *p , *q; if (inext; //h是引用類型,改變它的值可以改變實參的值 free(p); return ; } for(j=1,p=h ; jnext; } if (p!=NULL) { q-next = p-next; free(p); }}void disp(Node *h){ while(h!=NULL) { cout no; h = h-next; }}。