所以我一直在使用C代码(用于类)。链表由相互链接的结构组成,我试图通过链表读取链表是否有任何链接,因此可以将其删除。但是,如果链接在最后,列表中的第一个链接将取代它的位置,因此第二个链接将成为第一个链接。一个图是这样的:如何更改链接列表以便删除最后一个链接,并且第一个链接取代它?
A-> B-> C-> D-> E和应该成为B-> C-> D->一
这就是我的工作。我能够做到这一点,以便中间的任何链接都被删除,但我被困在最后一部分。任何建议都会很棒。
STUDENT *DeleteByLastName(STUDENT *students, char *name)
{
STUDENT *pHead = students;
STUDENT *prev = NULL;
int check;
pHead = pHead->Next;
while(strcmp(pHead->Lastname, name) != 0 && pHead->Next != NULL){
prev = pHead;
pHead = pHead->Next;
}
check = strcmp(pHead->Lastname, name);
if (check == 0){
prev->Next = pHead->Next;
return students;
}
else if (check != 0 && pHead->Next != NULL){
prev = pHead;
pHead = pHead->Next;
check = strcmp(pHead->Lastname, name);
if (check == 0){
pHead = students;
prev->Next = pHead;
pHead->Next = NULL;
students = students->Next;
return students;
}
}
编辑:帮助澄清我的问题。所以我的主要问题是,我试图将链表的末尾循环到第一个元素,并将它分离以制作B-> C-> D-> A格式。我正在考虑添加结构来保存开始位置以及我想要返回的位置。但是这可能会导致我的程序失败或进入无限循环。
编辑2:代码的主体提供了,我将编辑功能来帮助完成任务。第一个是扫描每个链接,看看是否有人的姓氏,并删除该链接。然后,我将根据我写的代码来创建条件,如果名称不在我想让它回到起点的任何链接中。最后的任务是使A-B-C-D-E变成B-C-D-A。
EDIT3:它应该如何工作的一个例子: Sanka-> Robbert-> Jordan-> Blunc-> Wei->朱 和名称进行检查是朱,所以最终名单应该是这样的: Robbert-> Jordan-> Blunc-> Wei-> Sanka
“我卡住了”。解释你为什么被卡住。你告诉我们你想做什么,但没有解释为什么你不能这样做。以上代码的状态是什么?它做一些你想要的东西吗?它试图做什么,但崩溃?可以...? – kaylum
一种奇怪的要求..旋转第一个节点的最后一点是什么? – yano
你有什么原始的东西可以帮助你?你有“删除第一”功能吗? “删除最后”功能? '添加在结束功能'?通过这三个“删除未链接节点”功能,您可以轻松完成这项工作。那些特殊情况呢?双链表是特殊的;您将以第一个节点为唯一节点。单链表是特殊的;你最终会得到你开始使用的列表,因为你删除了尾部,然后将它添加到结果空列表的尾部? –