1
class List {
  ListNode *head;
  ListNode *prev;
};

class ListNode {
  int data;
  ListNode *next;
  friend class List;
  ListNode(int d, ListNode *n) : data(d), next(NULL) {}
  void insertM(int d) {
    ListNode *ptr, *temp, *curr;
    ptr = head;
    while (ptr->data < d) {
      prev = ptr;
      ptr = ptr->next;
    } // end while
    temp = prev->next;
    curr = new ListNode(d, ptr);
    curr->next = prev->next; // or temp->next
    prev->next = curr;
    ;
  }
};

List mylist;

在这个函数中,我试图在链表的中间添加一个节点。其他功能将项目添加到背面和正面就好了。当我在列表中间添加时,我的 prev->next 链接到 curr 就好了,但 curr->next 指向 NULL。

在过去的 1.5 个小时里,我一直试图让这个程序正常工作。我会感谢你的帮助。这是家庭作业。

4

1 回答 1

1

您要使用的一般程序是:

  1. 向下next浏览指针,直到到达要插入的节点(称为 A)
  2. 更改插入的节点(B)的next指针以匹配 A 的next指针
  3. 改变A的next指针指向B

从您的代码中可以看出,您正试图维护一个排序的整数列表。这是一项家庭作业,您可能不会得到代码片段,但是通过查看您的代码,我不得不问为什么您在节点构造函数中使用下一个参数,然后将下一个值设置为 null。没有看到你的其余代码我不能肯定地说,但我会next(NULL)在第 9 行更改为next(n),然后删除curr->next靠近底部的行

于 2012-05-13T01:54:07.850 回答