今天,我从老师那里收到了新作业。
他告诉我这个作业可能是期末考试的样本。
我尝试了大约2~3小时,但无法获取。
他给了我一个简单的LinkedList代码。下面粗体字是他想要的。
您能给我一些关于比较节点大小的提示吗?
添加节点与前置节点和后节点对比
2 --> 5 --> 10 --> 20
当我插入MiddleNode(7)时,自动将输入数字(7)与ListNode进行比较并找到正确的位置
我的目标: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 作为上一个节点(要么因为列表为空,要么 x 是最小的),在这两种情况下你都需要返回(或者你会破坏列表)。 然后只需调用老师的函数即可
关于c - LinkedList 添加节点按大小与 C 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59267098/