数据结构之链表

时间:2022-01-12 11:11:00

#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
typedef struct lnode
{
 int data;
 struct lnode *next;
}LNODE,*Linklist;

//创建链表,插入,删除,逆序(通过插入完成),合并。
LNODE *linklist_creat(LNODE *l,int n)
{
 LNODE *head=(LNODE *)malloc(sizeof(LNODE *));
 head->next=NULL;
 LNODE *p,*q;
 int i=1;
 while(i<=n)
 {
  p=(LNODE *)malloc(sizeof(LNODE *));
  printf("please enter the %d data/n",i);
  scanf("%d",&p->data);
  p->next=NULL;
  if(head->next==NULL) head->next=p;//注意开始节点的问题。
  else
   q->next=p;
  q=p;
  i++;
 }
 
return (head);
}

LNODE *linklist_reverse_creat(LNODE *l,int n)//逆序输入N个值到链表。
{
 LNODE *head=(LNODE *)malloc(sizeof(LNODE *));
 head->next=NULL;
 LNODE *p,*q;
 int i=1;
 while(i<=n)
 {
  p=(LNODE *)malloc(sizeof(LNODE *));
  p->next=NULL;
  printf("please enter the %d num /n",i);
  scanf("%d",&p->data);
  p->next=head->next;//插入法进行逆序 关键句。
  head->next=p;
  i++;


 }

 return(head);
}

LNODE *linklist_insert(LNODE *l,int i,int e)//在I元素后插入
{
 LNODE *p,*q;
 p=l;
 int j=0;
 while(j==i)
 {
  
  p=p->next;
  j++;
 }
 q=(LNODE *)malloc(sizeof(LNODE *));
 q->data=e;
 q->next=p->next;
 p->next=q;

 return(l);

}

LNODE *linklist_del(LNODE *l,int i,int &e)
{
 return l;
}

void linklist_travel(LNODE *l)
{
 LNODE *p;
 p=l->next;
 int i=1;
 while(p)
 {
  
  printf("the %d num is %d /n",i,p->data);
  p=p->next;
  i++;

 }
}


LNODE *linklist_reverse(LNODE *l)
{
 LNODE *head,*p,*q;
 p=l->next;
 head=(LNODE *)malloc(sizeof(LNODE *));
 head->next=NULL;
 while(p!=NULL)
 {
  l->next=p->next;
  
  p->next=head->next;//插入关键句
  head->next=p;
  
  p=l->next;


 }


 return(head);