if(ist== NULL i=0){∥插在表前 newnode→hink= first; if (first ==NULL) last =newnode; first= newnode, ese /插在表中或末尾 newnode-link=p-link; if(p-link== NULL last newnode; p→link= newnode; return 1
if ( first == NULL || i == 0 ) { //插在表前 newnode→link = first; if ( first == NULL ) last = newnode; first = newnode; } else { //插在表中或末尾 newnode→link = p→link; if ( p→link == NULL ) last = newnode; p→link = newnode; } return 1; }
删除 第一种情况:删除表中第一个元素 第二种情况:删除表中或表尾元素 删除前… G}- ai a计+ 删除后… G}-1 计 在单链表中删除含a的结点
删除 第一种情况: 删除表中第一个元素 第二种情况: 删除表中或表尾元素 在单链表中删除含ai的结点
int List: Remove( int i)& ∥在链表中删除第个结点 Node p=first, *a; int k=0; while(p null &&k< i-1) {p=p→link;k+;}/找第i个结点 if(p== null)& cout <<"Invalid position for Deletion! n return 0
int List::Remove ( int i ) { //在链表中删除第i个结点 Node *p = first, *q; int k = 0; while ( p != NULL && k< i-1 ) { p = p→link; k++; } //找第i-1个结点 if ( p == NULL ) { cout << “Invalid position for Deletion!\n”; return 0; }
f(i==0){ /删除表中第1个结点 g=first; /g保存被删结点地址 p=fst=frt→link;/修改 first else i /删除表中或表尾元素 q=p→link; p→→link=q→link; /新链接 if(q==lt)last=p;/r能修改last k=q→data; delete g 删除q return k
if ( i == 0 ) { //删除表中第1个结点 q = first; //q保存被删结点地址 p = first = first→link; //修改first } else { //删除表中或表尾元素 q = p→link; p→link = q→link; //重新链接 } if ( q == last ) last = p; //可能修改last k = q→data; delete q; //删除q return k; }
带表头结点的单链表 表头结点位于表的最前端,本身不带 数据,仅标志表头。 设置表头结点的目的是统一空表与非 空表的操作,简化链表操作的实现。 first 1 an∧ fist→∧ last last 非空表 空表
带表头结点的单链表 表头结点位于表的最前端,本身不带 数据,仅标志表头。 设置表头结点的目的是统一空表与非 空表的操作,简化链表操作的实现。 非空表 空表