我努力解決這個問題,但只設法部分解決它。在鏈接列表中的特定元素之後添加元素並刪除第一個元素
我在這個方法的問題是,我需要另一個元素的後面添加一個元素:
例子:add 5 1
5是鏈表的元素,但我想5後加1 。
實施例:設鏈表包含這些元素:2 3 7
我調用方法來添加1個AFTE r 3,add 3 1
,所以結果假定爲2 3 1 7
,但用我的方法結果是2 1 3 7
,這是我的問題。
第二個問題是,我無法處理的第一個元素:
例子:add 2 1
彷彿第一個元素不存在它的作用:
void addNodeAtPos(link *head, int pos,int addelement)
{
link prev=NULL;
link curr =*head;
link newNode = (link)malloc(sizeof(node));
newNode->data = addelement;
while(curr->next != NULL)
{
prev = curr;
curr = curr->next;
if(curr->data == pos)
{
newNode->next = curr;
prev->next = newNode;
break;
}
}
}
我這裏的問題是我不能刪除第一個元素:
void deletenode(link *head,int s){
bool found = false;
node *curr = *head, *prev=NULL;
while(curr != NULL){
// match found, delete
if(curr->data == s){
found = true;
// found at top
if(prev == NULL){
link temp = *head;
curr->next= prev;
delete(temp);
// found in list - not top
}else{
prev->next = curr->next;
delete(curr);
} }
// not found, advance pointers
if(!found){
prev = curr;
curr = curr->next; }
// found, exit loop
else curr = NULL; }
}
我建議你在調試器中運行您的程序和步驟,通過逐行插入功能。那麼你的插入問題應該變得非常明顯。包括另一個問題,即不能插入新的第一個節點。 – 2014-09-29 08:46:51
現在的問題是 'newNode-> next = curr; prev-> next = newNode;' 應該糾正。 – 2014-09-29 08:48:24
另外,如果您有兩個不同功能的問題,您應該提出兩個問題。 – 2014-09-29 08:49:52