//定义单链表
typedef struct LNode{
int data;
struct LNode *next;
}LNode *LinkList;
//返回单链表的中间结点
LNode * findMidNode(LinkList L){
int length=0;
LNode *p=L->next;
while (p!=NULL){
length++;//累加结点总数
p=p->next;}
int count=0;
//计数器
p=L->next;
//从头遍历
while(p!=NULL){
count++;
if (count==length/2)
break;//找到中间结点即可跳出循环
p=p->next;}
return p;}
技巧:1.循环遍历+计数器
2.如果要插入/删除结点,可以考虑前后指针
基本训练:
- 按位序查找(计数器)
- 按关键字条件查找+删除某个结点
- 按关键字条件查找+插入某个节点
- 头插法(实现原地逆序)
- 尾插法(保持原序)