链表基础小结

//定义
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值