Skip to content

Instantly share code, notes, and snippets.

@syshack
Created September 10, 2012 08:17
Show Gist options
  • Select an option

  • Save syshack/3689622 to your computer and use it in GitHub Desktop.

Select an option

Save syshack/3689622 to your computer and use it in GitHub Desktop.
链表
#include <stdio.h>
#include <stdlib.h>
#ifdef DEBUG
#define my_printf(fmt, args...) printf("[%s: %d]"fmt, __FUNCTION__, __LINE__, ##args)
#else
#define my_printf(fmt, args...)
#endif
typedef int ElemType;
typedef int status;
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
LinkList Create(LinkList L)
{
LinkList p;
L=(LinkList)malloc(sizeof(Lnode));
L->data = 119;
L->next = p = (LinkList)malloc(sizeof(Lnode));
p->data = 110;
p->next = NULL;
return L;
}
LinkList ADD_L(LinkList L,int data){
LinkList p,q = NULL;
if(L!=NULL){
p = L;
while (p&&p->next!=NULL){
p = p->next;
}
p->next = q = (LinkList)malloc(sizeof(Lnode));
q->data = data;
q->next = NULL;
}
return L;
}
LinkList ADD_R(LinkList L){
LinkList p = NULL;
p=(LinkList)malloc(sizeof(Lnode));
p->data = 45;
p->next = L;
return p;
}
/*插入节点,i插入的位置,data为插入的值*/
LinkList ADD(LinkList L,int i,int data){
LinkList p = L;
LinkList s = NULL;
int j = 0;
while(p&&j<i-1){
p = p->next;
++j;
}
if(!p||j>i-1){
printf("Error");
}
s=(LinkList)malloc(sizeof(Lnode));
s->data = data;
s->next = p->next;
p->next =s;
return L;
}
LinkList DEL(LinkList L,int i){
LinkList p,q,s;
int j;
q = L;
if(L!=NULL){
if(i==1){
p = q->next;
q->next = NULL;
free(q);
return p;
}
else{
for(j=1;j<i;j++){
p = q->next;
}
s = q;
if(p->next==NULL){
s->next = NULL;
}
else{
s->next = p->next;
}
p->next = NULL;
free(p);
return L;
}
}
return NULL;
}
LinkList REV(LinkList L){
LinkList p=L,s,q;
if (L!=NULL)
{
q = p->next;
while(q){
s = q->next;
printf("line 1 \n");
q->next = p;
printf("line 2 \n");
p = q;
printf("line 3 \n");
q = s;
printf("line 4 \n");
}
L->next = NULL;
return p;
}
else{
return NULL;
}
}
void GetElem(LinkList L){
LinkList p = NULL;
int i = 1;
if(L!=NULL){
printf("%d:%d\n",i,L->data );
p = L->next;
while (p){
printf("%d:%d\n",++i,p->data);
p = p->next;
}
}
}
int main(int argc, char const *argv[])
{
/* code */
LinkList L = NULL;
LinkList L1 = NULL;
LinkList L2 = NULL;
LinkList L3 = NULL;
LinkList L4 = NULL;
LinkList L5 = NULL;
L = Create(L);
printf("Create\n");
GetElem(L);
L3 = ADD_R(L);
printf("Insert 45\n");
GetElem(L3);
L2 = ADD_L(L3, 23);
printf("Insert 23\n");
GetElem(L2);
L1 = ADD(L3, 1, 12);
printf("Insert 12\n");
GetElem(L1);
printf("DEL line 2\n");
L4 = DEL(L3, 1);
GetElem(L4);
printf("REV\n");
L5 = REV(L4);
GetElem(L5);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment