//定义
typedef struct LNode* List
struct LNode
{
int Data;
LNode* Next;
};
struct LNode L;
LNode* Ptrl; //等同于List Ptrl;
// 求表长度
int Length(List Ptrl)
{
List p=Ptrl;
int len=0;
while(p)
{
p=p->Next;
len++;
}
return len;
}
//按序号查找第K个节点,返回指向该节点的指针
List FindKth(int K,List Ptrl)
{
List p=Ptrl;
int i=1;
while(i<K&&p!=NULL)
{
p=p->Next;
i++;
}
return p;
}
//按值查找
List Find(ElementType X,List Ptrl)
{
List p=Ptrl;
while(p!=NULL&&p->Data!=X)
{
p=p->Next;
}
return p;
}
//链表的插入在第i-1个节点后,i从2开始
List Insert(Element Type X,int i,List Ptrl)
{
List p=Ptrl,s;
int k=1;
while(k<i-1&&p!=NULL)
{
p=p->Next;
}
if(p==NULL)
{
return NULL; //有可能是本来Ptrl为空,或者i太大了
}
s=(List)malloc(sizeof(LNode));
s->Data=X;
s->Next=p->Next;
p->Next=s;
return Ptrl;
}
//删除第i个节点
List Delete(int i,List Ptrl)
{
List p=Ptrl,s;
int k=1;
while(k<i-1&&p!=NULL)
{
p=p->Next;
}
if(p==NULL)
{
cout<<"第i-1不存在"<<endl;
return NULL;
}
if(p->Next==NULL)
{
cout<<"第i个节点不存在"<<endl;
return NULL;
}
p->Next=p->Next->Next;
return Ptrl;
}
**
重!要!
**
//单链表的全逆转
List Reverse(List Ptrl)
{
List new,old,tmp;
new=Ptrl;
old=new->Next;
while(old)
{
tmp=old->Next;
old->Next=new;
new=old;
old=tmp;
}
Ptrl->Next=NULL;
Ptrl=new;
return Ptrl;
}
//移除链表中所有值为val的元素
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode *p , *pre;
p = head;
pre = p;
while(p)
{
if(p -> val == val)
{
if(p == head)
{
head = head -> next;
p = head;
}
else
{
pre -> next = p ->next;
p = p -> next;
}
}else
{
pre = p;
p = p -> next;
}
}
return head;
}