链接列表添加节点按大小与 C 进行比较



今天,我从老师那里得到了一个新的作业。

他告诉我,这门作业可能是期末考试的样本。

我尝试了大约2~3个小时,但我无法得到它。

他给了我一个简单的LinkedList代码。下面粗体是他想要的。

你能给我一些关于比较节点大小的提示吗?

添加节点与节点前和节点后相比。

2 --> 5 --> 10 --> 20

当我插入中间节点( 7 时,自动将输入数字(7(与列表节点进行比较并找到正确的位置

我的目标 : 2 --> 5 -->7(这是我的输入( --> 10 --> 20

教师守则如下:

void insertMiddleNode(linkedList_h* L, listNode* pre, int x) {
listNode* newNode;
newNode = (listNode*)malloc(sizeof(listNode));
newNode->data = x;
if (L == NULL) {                // Empty
newNode->link = NULL;       // connect
L->head = newNode;
}
else if (pre == NULL) {         // 
L->head = newNode;          // Insert Node at First
}
else {
newNode->link = pre->link;  // after pre node
pre->link = newNode;
}
}

或者是否可以在主代码中实现相同的功能?

int main() {
linkedList_h* L;
listNode* p;
L = createLinkedList_h();
insertLastNode(L, 1);
insertLastNode(L, 5);
insertLastNode(L. 10);
insertLastNode(L, 20);    // 1 - 5 - 10 - 20
insertMiddleNode(L, p, 7)  // using p = scanf("%d") with If ( p < pre Node )
printList(L)  // 2 - 5 - 7 - 10 - 20
}
void MiddleNode(linkedList_h* L, int x) {
if (L == null)
return
//setp 1: find the previous node
listNode* prev = null;
for (listNode* node = L->head; node && node->data < x; node = node->link)
prev = node;
//step2: be sure prev is not null
if (prev == null)
return;
//or call inserFirstNode(L, x) and return
//step 3: call your teacher's function
insertMiddleNode(L, prev, x);
return;
}

如果 L 不存在,则返回,否则您将崩溃

第一步很简单,遍历列表以查找上一个元素 但是您最终可能会以 null 作为 prev 节点(要么导致列表为空,要么 x 最小(,在这两种情况下您都需要返回(否则您将破坏列表(。 然后只需调用老师的函数

相关内容

  • 没有找到相关文章

最新更新