简单的单链表<实现单链表的增删查改逆序和寻找中间节点>

为了方便在c++中完成


#include<stdio.h>
#include<malloc.h>
#include<assert.h>
typedef  int datatype;
typedef struct SingleLinkList
{
 datatype _data;
 SingleLinkList *_nextlist;
}SingleLinkList;
void PrintList(SingleLinkList* phead)
{
 
 SingleLinkList *cur=phead;
 while (cur!=NULL)
 {
  printf("%d", cur->_data);
  cur = cur->_nextlist;
 }
}
SingleLinkList * BuyNote(datatype x)
{
 SingleLinkList *tmp;
 tmp = (SingleLinkList*)malloc(sizeof(SingleLinkList));
 tmp->_data = x;
 tmp->_nextlist = NULL;
 return tmp;
}
void PushFrount(SingleLinkList* &phead, datatype x)
{
 if (phead == NULL)
 {
  phead = BuyNote(x);
 }
 else
 {
  SingleLinkList *tmp;
  tmp = BuyNote(x);
  tmp->_nextlist = phead;
  phead = tmp;
 }
}
void PushTail(SingleLinkList* &phead ,datatype x)
{
 assert(phead);
 if (phead == NULL)
 {
  phead = BuyNote(x);
 }
 else
 {
  SingleLinkList *cur = phead;
  while (cur->_nextlist != NULL)
  {
   cur = cur->_nextlist;
  }
  SingleLinkList *tmp = BuyNote(x);
  cur->_nextlist = tmp;
 }
}
void PopFront(SingleLinkList* &phead)
{
 assert(phead);
 if (phead == NULL)
 {
  printf("没有要删除的");
 }
 else if (phead->_nextlist == NULL)
 {
  
  SingleLinkList *tmp = phead;
  phead = NULL;
  free(tmp);
  
 }
 else
 {
  SingleLinkList *cur = phead;
  phead = phead->_nextlist;
  free(cur);
 }
}
void PopTail(SingleLinkList* &phead)
{
 assert(phead);
 if (phead == NULL)
 {
  printf("没有要删除的");
 }
 else if (phead->_nextlist == NULL)
 {
  free(phead);
  phead = NULL;
  
 }
 else
 {
  SingleLinkList *cur = phead;
  while (cur->_nextlist->_nextlist != NULL)
  {
   cur = cur->_nextlist;
  }
  SingleLinkList *tmp = cur->_nextlist->_nextlist;
  free(tmp);
  cur->_nextlist = NULL;
 }
}
SingleLinkList *find(SingleLinkList* &phead, datatype x)
{
 assert(phead);
 SingleLinkList *tmp = phead;
 while (tmp)
 {
  if (tmp->_data == x)
  {
   return tmp;
  }
  tmp = tmp->_nextlist;
 }
 printf("没有抱歉");
 return 0;
}
void Erase(SingleLinkList* &phead,datatype x)
{
 assert(phead);
 SingleLinkList *tmp = phead;
 if (tmp->_data == x)
 {
  free(tmp);
  phead =NULL;
 }
 else if ((tmp->_nextlist->_data == NULL) && tmp->_nextlist->_nextlist == NULL)
 {
  SingleLinkList *ret = tmp->_nextlist;
  free(ret);
  tmp->_nextlist = NULL;
 }
 while (tmp->_nextlist)
 {
  if (tmp->_nextlist->_data == x)
  {
   SingleLinkList *ret = tmp->_nextlist;
   tmp->_nextlist = ret->_nextlist;
   free(ret);
  }
  tmp = tmp->_nextlist;
 }
 
} 
void Insert(datatype x, SingleLinkList * &pos)
{
 assert(pos);
 SingleLinkList *ret = BuyNote(x);
 SingleLinkList *tmp = pos;
 if (tmp->_nextlist == NULL)
  {
   tmp->_nextlist = ret;
  ret->_nextlist = NULL;
  }
  ret->_nextlist = tmp->_nextlist;
  tmp->_nextlist = ret;
}
SingleLinkList * Resever(SingleLinkList * &phead)
{
 assert(phead);
 if (phead->_nextlist == NULL)
 {
  return phead;
 }
 else if (phead->_nextlist->_nextlist == NULL)
 {
  SingleLinkList *tmp = phead->_nextlist;
  tmp->_nextlist = phead;
  phead->_nextlist = NULL; 
  return tmp;
 }
 else
 {
  SingleLinkList *cur = phead;
  SingleLinkList *tmp;
  SingleLinkList *newphead=NULL;
  while (cur)
  {
   tmp = cur;
   cur = cur->_nextlist;
   tmp->_nextlist = newphead;
   newphead = tmp;
  }
  return newphead;
 
 }
}
SingleLinkList *MidList(SingleLinkList* &phead)
{
 assert(phead);
 SingleLinkList *slowstratlist = phead;
 SingleLinkList *faststratlist = phead;
 if (phead->_nextlist->_nextlist == NULL)
 {
  return phead;
 }
 else
 {
  while (faststratlist->_nextlist)
  {
   slowstratlist = slowstratlist->_nextlist;
   faststratlist = faststratlist->_nextlist->_nextlist;
  }
  return slowstratlist;
 }
}
int main()
{
 Test1();
}


本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/10696766/1716515

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值