面试题答案
一键面试- 使用
malloc()
分配内存:- 对于多层嵌套的链表,先为最外层链表的头节点分配内存,使用
malloc(sizeof(外层链表节点结构体))
。假设外层链表节点结构体定义如下:
为外层链表头节点分配内存:typedef struct OuterNode { int data; struct InnerNode *innerList; struct OuterNode *next; } OuterNode;
OuterNode *outerHead = (OuterNode *)malloc(sizeof(OuterNode)); if (outerHead == NULL) { // 处理内存分配失败情况,如返回错误或退出程序 return; }
- 然后,对于外层链表每个节点中的内层链表,同样需要分配内存。假设内层链表节点结构体定义如下:
为内层链表节点分配内存:typedef struct InnerNode { int innerData; struct InnerNode *next; } InnerNode;
在内层链表分配过程中,可能需要循环分配多个节点,直到内层链表构建完成。同样,在外层链表中,也需要循环分配多个外层节点,构建完整的多层嵌套链表结构。InnerNode *innerNode = (InnerNode *)malloc(sizeof(InnerNode)); if (innerNode == NULL) { // 处理内存分配失败情况 return; }
- 对于多层嵌套的链表,先为最外层链表的头节点分配内存,使用
- 使用
free()
释放内存:- 释放内存的顺序很关键,要遵循从内到外的顺序。首先释放内层链表的内存。对于内层链表,从链表头开始,依次释放每个节点:
InnerNode *currentInner = outerHead->innerList; InnerNode *nextInner; while (currentInner!= NULL) { nextInner = currentInner->next; free(currentInner); currentInner = nextInner; }
- 内层链表释放完后,再释放外层链表节点的内存。从外层链表头开始,依次释放每个节点:
这样就能确保内存正确释放,避免内存泄漏。OuterNode *currentOuter = outerHead; OuterNode *nextOuter; while (currentOuter!= NULL) { nextOuter = currentOuter->next; free(currentOuter); currentOuter = nextOuter; }
注意,在实际代码中,还需要根据具体的数据结构细节和业务逻辑对上述代码进行适当调整和完善。并且,在C++中,更推荐使用new
和delete
操作符来进行内存管理。