// 创建元素x的载体,并且初始化 DNode * s = (DNode *)malloc(sizeof(DNode)); s -> data = x;
// 双链表最后一个节点插入比较特殊,因此需要特判 // 只有当不是双链表最后一个节点才操作 p -> next -> prior if(p -> next) p -> next -> prior = s; s -> next = p -> next; p -> next = s; s -> prior = p;
while(x != 9999){ // 1.创建新节点 DNode * p = (DNode *)malloc(sizeof(DNode)); p -> data = x; // 2.插入 p -> next = r -> next; r -> next = p; p -> prior = r; // 3.更新尾指针 r = p; cin >> x; }
// 删除第 i 个位置的元素 voidDelete(DLinkList & list, int i){ // 删除位置是否合法 if(i < 1 || i > Length(list)){ cout<<"delete failed: index is wrong."<<endl; return; }
// 找到第 i - 1 个元素 DNode * p = GetElem(list, i - 1); // 被删除的元素 DNode * q = p -> next;
// 警惕!如果删除的是最后一个节点,那么需要特判 // 只有删除的不是最后一个节点 if(q -> next){ q -> next -> prior = p; } p -> next = q -> next; free(q); }