所以我得到了以下结构:
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;
}
提前感谢!
您可以将其分解为任务:
- 创建一个新节点
- 遍历旧列表
- 将节点添加到新列表中
因此,创建一个名为createNode()
的函数,该函数将像createList()
一样向调用方返回一个新节点。
然后创建一个名为appendList()
(或者你喜欢的任何名称(的函数,它会在链表的末尾添加一个节点。此函数应使用createNode()
来创建新节点。它还应该能够处理向空链表中添加节点的问题。
然后在copyList()
中,创建一个新列表(将值复制到其中的列表(,迭代旧的链表,并调用appendList()
函数将节点值放入新列表。然后返回一个指向新列表的指针。