如何遍历一遍得到单向链表中间位置的元素

2019-01-04  本文已影响4人  小幸运Q

设置两个指针,p1,p2, 开始p1,p2均位于链接的头部。
p1 每次步进两步,
p2 每次步进一步
当p1到达链表的末尾时,p2所在的位置就是链表的中间元素

#include<iostream>
using namespace std;
#define N 1000
typedef struct Node{
  int num;
  Node* next;
  Node(){
    num=0;
    next=NULL;
  }
}Node;
void findmiddle(Node*root){
  Node* p=root;
  Node* q=root;
  // p在前面,q在后面
  while((p->next)!=NULL&&((p->next)->next)!=NULL){
    p=((p->next)->next);
    q=q->next;
  }
  cout<<"middle:"<<q->num<<endl;
}
void add(Node*&root,int num){
  if(root==NULL){
    root=new Node();
    root->num=num;
    return;
  }
  add(root->next,num);
}
void print(Node*p){
  while(p!=NULL){
    cout<<p->num<<endl;
    p=p->next;
  }
}
int main(){
  Node*p=NULL;
  add(p,1);
  add(p,2);
  add(p,3);
  add(p,4);
  findmiddle(p);
}
上一篇 下一篇

猜你喜欢

热点阅读