// 在p结点之后插入元素e boolInsertNextNode(LNode * p, int e){ // 1.不能在NULL后面插入元素 if(!p) returnfalse; // 2.创建新节点承载元素e LNode * s = (LNode *)malloc(sizeof(LNode)); s -> data = e; // 3.后插 s -> next = p -> next; p -> next = s;
while(x != 9999){ LNode * s = (LNode *)malloc(sizeof(LNode)); s -> data = x; // 在尾指针指向的节点后面插入新元素 s -> next = r -> next; r -> next = s; r = s; // 更新尾指针 cin >> x; } // 非常重要!!!! r -> next = NULL;// 尾指针指向的节点的next置空 }
// 2. 查找 // 计数器 int j = 1; // 第一个元素(可能为空) LNode * p = list -> next;
while(p && j < i){ // 循环次数为:相距 i - 1 次(从第1位置找到第4位置需要移动3个单位) j++; p = p -> next; }
return p; }
插入
1 2 3 4 5 6 7
//将x插入到单链表list的第i个位置上 voidInsert(LinkList & list, int i, int x){ // 插入操作需要先找到第 i - 1 个位置的节点,再插入 LNode * p = GetElem(list,i-1); // 在 p 节点后面插入元素x InsertNextNode(p, x); }
删除
1 2 3 4 5 6 7 8 9 10 11 12 13
// 将单链表中的第i个结点删除 voidDelete(LinkList & list, int i){ if(i<1 || i > Length(list)){ cout<<"delete failed: index is wrong."<<endl; return; } // 找到第 i - 1 个节点 LNode * p = GetElem(list,i-1); // 删除 LNode * q = p->next; p->next = q->next; free(q); }