天天看點

單項連結清單的定位,插入,删除

struct node

{

 int data;

 node* next;

};

struct linklist

{

 node* head;  //表頭指針

 int n;       //線性表的長度

};

int main(int argc, char* argv[])

{

 printf("Hello World!/n");

 return 0;

}

//定位

node* loc(linklist L,int i)

{

 if(i<0 || i>L.n)

 {

  return NULL;

 }

 else

 {

  int j=0;

  node* temp = L.head; //指向第一個元素

  while(j<i)

  {

   temp = temp->next;

   j++;

  }

  return temp;

 }

}

//往第i個節點的後面,插入值為x的接點

void ins(linklist &L,int i,int x)

{

 //如果i的範圍<0 或 >L.n

 if(i<0 || i>L.n)

 {

  return; //出錯,不進行插入

 }

 node* prevNode = loc(L,i); //找到第i個節點

 node q = new node();

 q.data = x;

 q.next = prevNode->next;

 prevNode->next = q;

 L.n++;

}

//删除第i個元素

void del(linklist& L,int i)

{

 if(i<1 || i>L.n)

 {

  return;

 }

 node* prevNode = loc(L,i-1);

 node* q = prevNode->next;

 prevNode->next = q->next;

 L.n--;

 delete q;

}