关于“单链表”笔记整理

【一】单链表的结构、建立、输出

参考代码:

#include<bits/stdc++.h>

using namespace std;

//(1)定义链表

struct Node{    

  int data;

  Node * next;

};

Node * p,* head, * r;

int main()

{

//输入------------------------------------------------------

  int x;

  cin>>x;    //往链表里存储的第一个数

  head=new Node;   //申请头结点

  r=head;   //最开始尾指针指向头结点

  while(x!=-1)   //没到达结束条件时

  {

    p=new Node;  //申请第一个结点

    p->data=x;   //给第一个结点存储数据

    p->next=NULL;   //设置第一个结点的指针域

    r->next=p;   //把新节点链接到头结点

    r=p; //尾指针指向第一个结点

    cin>>x;

  }

//输出------------------------------------------------------------------

  p=head->next;  //从第一个结点开始,头结点没有存储数据

  while(p->next!=NULL)  //如果不是最后一个结点,则继续访问下一个结点

  {

    cout<<p->data<<" ";

    p=p->next;

  }

  cout<<p->data<<endl;  //输出最后一个结点的数据

}

【二】查找数据域满足一定条件的结点

(1)找到第一个就结束:

p=head->next;

while(p->data!=x)&&(p->next!=NULL)  //一直往下找的条件

{

  p=p->next;

}

if(p->data==x)

{

  找到了处理;
}

else

{

  输出不存在;

}

(2)找到所有满足条件的值:

p=head->next;

while(p->next!=NULL)

{

  if(p->data==x)  //找到了处理

  p=p->next;   //继续查找下一个

}

【三】取出单链表的第i个结点的数据域:

void get(Node *head,int i)

{

  Node * p;int j;

  j=1;

  p=head->next;

  while((p!=NULL)&&(j<i))

  {

    p=p-next;

    j=j+1;

  }

  if((p!=NULL)&&(j==i))

  {

    cout<<p-data;

  }

  else{ cout<<"不存在";}

【四】插入一个结点在单链表中:插入x在第i个元素之前

void insert(Node * head,int x,int i)

{

  Node * p,* s;

  int j;

  p=head->next;

  j=0;

  whlie((p->next!=NULL) && (j<i-1))   //寻找第i-1个结点,插在它的后面,前i-1个数都不满足,则往后走

  {

    p=p->next;

    j++;

  }

  if(p->next==NULL) {cout<<"不存在";}

  else

  {

    s=new Node;

    s->data=x;

    s->next=p->next;

    p-next=s;

  }

}

【四】阐述单链表中的第i个结点:删除第i个数

void delete(Node *head,int i)

{

  Node *p,*s;   //假设s是删除结点的后继结点

  int j;

  p=head->next;

  j=0;

  while((p->next!=NULL) && (j<i-1)

  {

    p=p->next;

    j++;

  }

  if(p->next==NULL) cout<<"不存在”;

  else

  {

    s=p-next;

    p->next=p->next->next;

  }

}

【五】求单链表的实际长度

int len(Node *head)

{

  int n=0;

  p=head->next;

  while(p-next!=NULL)

  {

    p=p->next;

    n=n+1;

  }

  reutn n;

}

    

posted on 2021-01-10 20:15  我不会秃头  阅读(121)  评论(0)    收藏  举报