【1032】Sharing&链表题模板总结

简介: 于设一个int型变量flag,然后2次遍历——第一次遍历第一条链表(全部结点的flag改从false改为true),第二次遍历第二条链表,如果当前结点的flag是true则马上break跳出for循环(千万别忘了break!!),当

1.题目

https://pintia.cn/problem-sets/994805342720868352/problems/994805460652113920

静态链表,找出两条链表的首个公共结点。


2.思路

基础题。最巧妙点在于设一个int型变量flag,然后2次遍历——第一次遍历第一条链表(全部结点的flag改从false改为true),第二次遍历第二条链表,如果当前结点的flag是true则马上break跳出for循环(千万别忘了break!!),当然也可以直接return就好了。

注意点:

(1)用map容易超时;输出格式用%05d——不足5位的整数的高位补0;

(2)由于scanf使用%c格式时是可以读入空格的,所以读入当前地址、数据、后继地址时,scanf的格式不能写成%d%c%d,而要写成%d %c %d。


3.代码

#include<cstdio>
#include<iostream>
#include<stdlib.h>
using namespace std;
const int maxn=100010;
struct Node{
  char data;
  int next;
  bool flag;//结点是否在第一条链表中出现 
}node[maxn];
int main(){
  for(int i=0;i<maxn;i++)
    node[i].flag=false;
  int s1,s2,n;
  int address,next;
  scanf("%d%d%d",&s1,&s2,&n);
  char data;//数据
  for(int i=0;i<n;i++){
    scanf("%d %c %d",&address,&data,&next);
    node[address].data=data;
    node[address].next=next;
  }
  int p;
  for(p=s1;p!=-1;p=node[p].next){
    node[p].flag=true;//枚举第一条链表的所有结点,令其出现次数为1
  }
  for(p=s2;p!=-1;p=node[p].next){
    //遍历第2链表,找到第一个已经在第一条链表中出现的结点
    if(node[p].flag==true) 
      break;
  }
  if(p!=-1){//如果第二条链表还没有到达结尾,说明找到了共用结点
    printf("%05\n",p);
  }else{
    printf("-1\n");
  }
  system("pause");
}

4.模板总结

(1)定义静态链表。

(2)for循环对静态链表的每个结点的某元素初始化。

(3)遍历链表,计数:

int p=begin,count=0;
while(p!=-1){//-1代表链表结束
  XXX=1;
  count++;
  p=node[p]->next;
}

(4)很多时候题目给出的结点并不都是有效结点(即可能存在不在链表上的结点),对数组进行排序从而把有效结点移到数组左端。

bool cmp(Node a,Node b){
  if(a.XXX==-1||b.XXX=-1){
    //至少一个结点是无效结点,就把它放到数组后面
    return a.XXX>b.XXX;
  }else{
    //第二级排序
  }
}


相关文章
C++学习笔记_13 双向链表和链表模板 2021-05-06
C++学习笔记_13 双向链表和链表模板 2021-05-06
|
存储 索引
顺序表和链表的优缺点总结
顺序表和链表的优缺点总结
1224 0
|
存储 缓存 算法
算法面试题 | 链表问题总结
算法面试题 | 链表问题总结
87 0
算法面试题 | 链表问题总结
|
存储 算法 Perl
【数据结构与算法】第四章:链表拓展与线性表总结
前面介绍了线性表的顺序表和链表,本章讲对链表应用拓展,具体介绍单链表、循环链表、双向链表等,并将顺序表与链表进行比较,更直观的感受两种不同结构的差异所在以及各自的优势短板,最后对线性表进行总结。
161 0
【数据结构与算法】第四章:链表拓展与线性表总结
|
存储 Java
代码随想录刷题|数组、链表的总结
代码随想录刷题|数组、链表的总结
|
算法
链表数据结构模板
链表数据结构模板
97 0
|
C语言
C语言链表模板,学生管理系统(链表数据写入文本)
学生管理系统(链表数据写入文本) 模板。
112 0
|
算法 Sentinel BI
[算法总结] 17 题! BAT面试涉及的链表题都在这里了
本文首发于我的个人博客:尾尾部落 链表是面试过程中经常被问到的,这里把剑指offer 和 LeetCode 中的相关题目做一个汇总,方便复习。 1. 在 O(1) 时间删除链表节点 题目描述:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。
1562 0