链表的操作(未完待续)

#include<iostream>
using namespace std;

typedef struct LNode {
	int data;
	struct LNode *next;
}LNode , *LinkList;

LNode *p,*q;
LinkList H;

//求链表的长度
int ListLength(LinkList L)
{
	 p = L;
	 int k = 0;
	 while(p){
	 	k++;
	 	p = p->next;
	 }           
	 return k;                                                            
} 
// 查找元素操作
LNode *Locate(LinkList L,int e) //e's type is int 
{
	//在L所指链表中查找第一个值和e相等的元素,若存在,则返回
	//它在链表中的位置,即指向该数据的元素所在节点的指针,否则返回NULL 
	p = L;            //用指针的方法代替下标,需要用一个节点类型的指针替换一下,以便操作 
	while(p && p->data != e) p = p->next;
	return p;
} 
//插入节点操作(前插)
void Insert (LinkList &L,LNode *p,LNode *s)
{
	//指针p指向L为头节点的链表中某个节点,将s节点插入到p节点之前
	if (p == L){
		s->next = L;
		L = s;
	} else {
		q = L;
		while( q->next !=p ) q = q->next;//迭代查找 
		q->next = s;
		s->next = p;
	}
} 

//删除节点的操作
void Delete(LinkList &L,LNode *p,int e)
{
	//p 指向链表中的某一个节点,从链表中删除该节点并由e返回该节点的值 
	if( p == L)  //L 就代表头节点
	{
		L = p->next;
	}else{
		q = L;
		while(q->next != p)q = q->next;   //p,q 都是地址,且p-〉next也是地址 
		q->next = p->next;
	}
	e = p->data;
	delete p; 
} 

原文地址:https://www.cnblogs.com/NYNU-ACM/p/4248792.html