真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++設(shè)計(jì)單鏈表習(xí)題及解答-創(chuàng)新互聯(lián)

C++設(shè)計(jì)單鏈表習(xí)題及解答

題目:實(shí)現(xiàn)一個(gè)單鏈表,鏈表初始為空,支持三種操作:

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出平南免費(fèi)做網(wǎng)站回饋大家。
  • 向鏈表頭插入一個(gè)數(shù)
  • 刪除第 k 個(gè)插入的數(shù)后面的數(shù);
  • 在第 k 個(gè)插入的數(shù)后插入一個(gè)數(shù)

(不知道這里題目有沒有理解錯(cuò),我理解的是刪除第k個(gè)插入的數(shù)(x),x的指針next所指向的數(shù),即刪除第k-1個(gè)插入的數(shù))

第一版源代碼:

#include#includeusing namespace std;
typedef struct ListNode
{int data;//數(shù)據(jù)域 
	struct ListNode*next;//指針域 
}*L;//相當(dāng)于typedef struct ListNode*L; 
//創(chuàng)建節(jié)點(diǎn) 
void CreateListNode(L*head) //改變鏈表的操作要用指針傳鏈表 ,也可以不用void,而用指針類型的函數(shù) L CreateListNode(L head){...return head;},這里只是想麻煩地練練手,嘻嘻
{*head = (ListNode *)malloc(sizeof(ListNode));   //創(chuàng)建頭結(jié)點(diǎn),為頭結(jié)點(diǎn)分配內(nèi)存 
        (*head)->next = NULL;//初始化頭結(jié)點(diǎn)的指針head為空指針 
}
//向鏈表頭插入一個(gè)數(shù)
void addAtHead(L*head,int val) 
{L newhead=(ListNode *)malloc(sizeof(ListNode));//創(chuàng)建新的頭結(jié)點(diǎn),為新的頭結(jié)點(diǎn)分配內(nèi)存
	 newhead->next=(*head)->next;
     (*head)->next=newhead;
     newhead->data=val;
} 
//刪除第 k 個(gè)插入的數(shù)后面的數(shù)
 void deleteAtIndex(L*head,int k)
{L cur=*head;//輔助指針從第一個(gè)節(jié)點(diǎn)開始
    while(k--)//遍歷到第k個(gè)位置(非下標(biāo)),循環(huán)次數(shù)是k次
	{cur=cur->next;
    }
    L p=cur->next;
	if(cur->next->next!=NULL)
    cur->next = cur->next->next; 
    else cur->next=NULL;
	free(p);
}
//在第 k 個(gè)插入的數(shù)后插入一個(gè)數(shù)
void addAtIndex(L*head,int k,int val) 
{L newnode=(ListNode *)malloc(sizeof(ListNode));
    L cur=*head;//輔助指針從頭指針開始
    while(k--) cur=cur->next;//遍歷到第k個(gè)節(jié)點(diǎn)(非下標(biāo)),循環(huán)次數(shù)是k次 
    newnode->next=cur->next;
    cur->next=newnode;
    newnode->data=val;
}
//打印出鏈表形態(tài) 
void printlist(L head)
{L newnode=head->next;
	while(newnode!=NULL)
	{cout<data;
		if(newnode->next!=NULL)cout<<"->";
		newnode=newnode->next;
	}
	cout<L head;
	CreateListNode(&head);
	int n,x1,k,x2;
	cin>>n;
	for(int i=0;icin>>x1;
		addAtHead(&head,x1);
	}
	cin>>k;
	cin>>x2;
	cout<<"n="<

運(yùn)行結(jié)果:
在這里插入圖片描述

寫完才發(fā)現(xiàn),好像混用了C和C++(心痛的感覺),于是經(jīng)過一番折騰,又誕生了第二版題解
改進(jìn):
①引用了C++的struct中特有的構(gòu)造函數(shù)(C沒有)
②采用類class
③把malloc換成new
其它一樣
第二版源代碼:

#includeusing namespace std;
typedef struct ListNode
{int data;
    struct ListNode *next;
    ListNode(int x) : data(x), next(NULL) {}//有參數(shù)構(gòu)造函數(shù),就是初始化, 注意:若要初始化數(shù)組,需先寫無參數(shù)構(gòu)造函數(shù) 
}*L;
class MyLinkedList
{private://private在其他類中被隱藏 
    L head; 
public://把public的函數(shù)寫在class外更為清晰明了
	CreateListNode(); 
	void addAtHead(int val);
	void addAtIndex(int k, int val);
	void deleteAtIndex(int k);
	void printlist();
};//被漏掉的分號(尷尬) 
    MyLinkedList::CreateListNode()
	{head=new ListNode(0);//不能在private內(nèi)初始化
    } 
    void MyLinkedList::addAtHead(int val)
	{L newhead=new ListNode(val);//new是堆中的內(nèi)存塊,與之前的malloc作用相同 
		newhead->next=head->next;
     	head->next=newhead;
     	newhead->data=val;
    } 
    
    void MyLinkedList::addAtIndex(int k, int val)
	{L newnode=new ListNode(val);
	    L cur=head;
	    while(k--) cur=cur->next;
	    newnode->next=cur->next;
	    cur->next=newnode;
	    newnode->data=val;
    }
    
    void MyLinkedList::deleteAtIndex(int k)
	{L cur=head;
	    while(k--)
		{cur=cur->next;
	    }
	    L p=cur->next;
		if(cur->next->next!=NULL)
	    cur->next = cur->next->next; 
	    else cur->next=NULL;
		delete p;//與之前的free作用相同 ,new分配的內(nèi)存塊由程序員釋放(編譯器不管) ,所以也要回收 
    }
    void MyLinkedList::printlist()
	{L newnode=head->next;
		while(newnode!=NULL)
		{	cout<data;
			if(newnode->next!=NULL)cout<<"->";
			newnode=newnode->next;
		}
		cout<MyLinkedList object;//MyLinkedList類里的object成員
	object.CreateListNode();
	int n,x1,k,x2;
	cin>>n;
	for(int i=0;icin>>x1;
		object.addAtHead(x1);
	}
	cin>>k;
	cin>>x2;
	cout<<"n="<

運(yùn)行結(jié)果:(和之前一樣)
在這里插入圖片描述
學(xué)習(xí)心得:剛開始寫的時(shí)候還不知道頭結(jié)點(diǎn)(不是第一個(gè)節(jié)點(diǎn))的好處,寫著寫著才發(fā)現(xiàn)如果不設(shè)頭指針,鏈表開始的位置在每一次addAtHead的時(shí)候都得改,這樣較為方便

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前標(biāo)題:C++設(shè)計(jì)單鏈表習(xí)題及解答-創(chuàng)新互聯(lián)
URL分享:http://weahome.cn/article/diicoj.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部