链表的建立、删除节点、侧长和打印;

/*
 *链表的建立、删除节点、侧长和打印; 
 */ 
  

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h> 


struct LinkNode
{
       int data;
       struct LinkNode* next;
};

typedef LinkNode* LinkList;
//
LinkNode* AddNode(LinkNode* p,int data);
//
int list_length(LinkList head);
//
void list_print(LinkList head);
//
void list_delete_node(LinkList head,int num);
//
void list_reverse(LinkList head);
//
LinkNode* list_middle(LinkList head);

int main(void)
{
    LinkList L1=(LinkNode*)malloc(sizeof(LinkNode));
    LinkNode*pTemp=L1;
    for(int i=0;i<10;i++)
    {          
               pTemp=AddNode(pTemp,i);
            
    }
    int temp=list_length(L1);
    printf("the length of L1 is %d\n",temp);
    list_print(L1);
  //  list_delete_node(L1,8);
   // list_reverse(L1);
  //  temp=list_length(L1);
  //  printf("the length of L1 is %d\n",temp);
  //  list_print(L1);
   LinkNode*pr=list_middle(L1);
   printf("the middle node of L1 is %d\n",pr->data);
    system("pause");
    return 0;
    
}
//
LinkNode* AddNode(LinkNode* p,int data)
{
          LinkNode* pNode=(LinkNode*)malloc(sizeof(LinkNode));
          pNode->data=data;
          pNode->next=0;
          p->next=pNode;
          return pNode;
}
//
int list_length(LinkList head)
{
    int length=0;
    if(head==0) return length;
    LinkList p=head->next;
    while(p)
    {
            length++;
            p=p->next;
    }
    return length;
}
//
void list_print(LinkList head)
{
     if(head)
     {
             LinkList temp=head->next;
             while(temp)
             {
                        printf("%d\n",temp->data);
                        temp=temp->next;
             }
     }
 
}
void list_delete_node(LinkList head,int num)
{
     if(head)
     {
             LinkNode* p,*q;
             p=head;
             q=head->next;
             while(q)
             {
                     if(q->data==num)
                     {
                        p->next=q->next;
                        free(q);
                        q=p->next;            
                     }
                     else
                     {
                         p=q;
                         q=p->next;
                     }
             }
     }
} 
//链表逆置
void list_reverse(LinkList head)
{
     LinkList p1,p2,p3;
    
     if(head)
     {
             if(head->next && head->next->next)
             {
                p2=head->next;   
                p3=p2->next;              
                while(p3)
                {
                     p2->next=p1;
                     p1=p2;
                     p2=p3;
                     p3=p3->next;    
                }                   
                p2->next=p1;
                p1=p2;  
             }         
             head->next=p1;             
              
     }
} 
//遍历一次求获取位于中间位置的那个节点
LinkNode* list_middle(LinkList head)
{
    
     if(head && head->next)
     {
              LinkList p,q;
              p=q=head->next;
            
              while(q)
              {
                      p=p->next;
                      if(q->next)
                      {
                        q=q->next->next;
                      }
                      else break;
              }
              return p;
     
     }
     else
     return 0;
}







 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值