美文网首页
如何遍历一遍得到单向链表中间位置的元素

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

作者: 小幸运Q | 来源:发表于2019-01-04 00:25 被阅读4次

  • 方法:

设置两个指针,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);
}

相关文章

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

    方法: 设置两个指针,p1,p2, 开始p1,p2均位于链接的头部。p1 每次步进两步,p2 每次步进一步当p1到...

  • 倒置链表

    题目描述:给出单向链表的头节点l,如何只遍历一次就将链表中的所有元素倒转。 算法描述: 首先给出单向链表的结构 遍...

  • 数据结构-单向链表

    单向链表的结构 Node节点 根据index获取节点 添加 删除 获取index位置的元素 清空 虚拟头节点的单向...

  • 双向链表的应用

    单向链表的缺点 只能从头遍历到尾,过程单向,很难回到上一个节点 双向链表的优点 可以双向遍历,既可以从头遍历到尾,...

  • 寻找list的中间元素

    给定一个非环的单向链表,寻找该链表的中间元素 可以通过两个指针同时遍历的方式,一个前进一步,一个前进两步,最后慢的...

  • 数据结构基础--单向循环链表

    单向循环链表 单向循环链表是可循环的单链表,它与单链表的区别在于单向链表的最后一个元素的指针域为空,而单向循环链表...

  • 线性表

    [TOC] 带头结点的单向链表 获取元素 指定位置插入一个结点 指定删除一个结点 循环双向链表 定义 指定位置插入...

  • Leetcode-876:链表的中间节点

    题目描述: 思路: ①:遍历一遍,得到链表总长,然后再遍历到一半的位置。 ②:快慢指针法:快指针一次走两步,慢指针...

  • 线性表-单向循环链表

    单向循环链表 单向循环链表示意图如下: 数据结构定义(同普通链表) 单向循环链表初始化与赋值 在上面循环遍历查找尾...

  • 链表小题目

    如何判断两条单向链表是否相交,以及相交节点 同时遍历两个链表,求出长度差,然后长的链表走完 N次以后,短链表再开始...

网友评论

      本文标题:如何遍历一遍得到单向链表中间位置的元素

      本文链接:https://www.haomeiwen.com/subject/fhmcrqtx.html