我努力解决这个问题,但只设法部分解决它。在链接列表中的特定元素之后添加元素并删除第一个元素
我在这个方法的问题是,我需要另一个元素的后面添加一个元素:
例子: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