今天,我从老师那里得到了一个新的作业。
他告诉我,这门作业可能是期末考试的样本。
我尝试了大约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 最小(,在这两种情况下您都需要返回(否则您将破坏列表(。 然后只需调用老师的函数