如何使用C中的ADT制作链接列表的副本



所以我得到了以下结构:

typedef struct nodeStruct
{
int data;
struct nodeStruct *next;
}Node;
typedef struct linkedList
{
Node *head, *tail;
}List;

我必须创建一个函数,使用给定的函数原型将现有列表的内容复制到一个新列表中:

List *copyList(List *passedList);

我该怎么做?它在踩我。

编辑:如果有帮助的话,我有这个功能来创建一个空列表:

List *createList()
{
List *newList = (List *)malloc(sizeof(List));
if (newList == NULL)
{
puts("ERROR: Could not allocate memoryn");
return NULL;
}
newList->head = newList->tail = NULL;
return newList;
}

编辑x2:我有一个createNode函数和一个insertAtTail(append(函数,如下所示:

Node *createNode(int nodeValue) // this function creates a node with the value that is passed to it
{
Node* newNode = (Node*)malloc(sizeof(Node));
newNode -> data = nodeValue;
newNode -> next = NULL;
return newNode;
}
int insertAtTail(int nodeValue, List *passedList)
{
Node *newNode = (Node *)malloc(sizeof(Node));
if (newNode == NULL)
{
puts("ERROR: Could not allocate memory.n");
return -1;
}
newNode -> data = nodeValue;
newNode -> next = NULL;
if (passedList->tail == NULL)
{
passedList->head = passedList->tail = newNode;
}
else
{
passedList->tail->next = newNode;
passedList->tail = newNode;
}
return 1;
}

提前感谢!

您可以将其分解为任务:

  1. 创建一个新节点
  2. 遍历旧列表
  3. 将节点添加到新列表中

因此,创建一个名为createNode()的函数,该函数将像createList()一样向调用方返回一个新节点。

然后创建一个名为appendList()(或者你喜欢的任何名称(的函数,它会在链表的末尾添加一个节点。此函数应使用createNode()来创建新节点。它还应该能够处理向空链表中添加节点的问题。

然后在copyList()中,创建一个新列表(将值复制到其中的列表(,迭代旧的链表,并调用appendList()函数将节点值放入新列表。然后返回一个指向新列表的指针。

相关内容

  • 没有找到相关文章

最新更新