单链表学习

#include "stdafx.h"
#include "stdio.h"
#include <iostream>
using namespace std;

#define MAXSIZE 50
#define swap(a,b) a=a+b;b=a-b;a=a-b;
typedef struct Node{
 int data;
 struct Node *next;
}LNode;
void Output(Node *p);
void TailOutput(LNode *p);
// 头插入法建链表
LNode* HeadList(LNode *head)
{
 int i;
 LNode *p,*h;
 h = head;
    for(i=0;i<5;i++)
 {
       p = (struct Node*)malloc(sizeof(struct Node));
       p->data = i;
    p->next = h->next;
    h->next = p;//新创建的节点,总是作为第一个节点
 }
 return head;
}
/*
  为了操作方便,总是在链表的第一个结点之前附设一个头结点(头指针)
  head指向第一个结点。头结点的数据域可以不存储任何信息(或链表长度等信息)
*/
//尾插入法建链表
LNode* TailList(LNode *Tail)
{
 LNode *p,*t;
 t = Tail;
 int i;
 for (i=0;i<10;i++)
 {
  p = (struct Node*)malloc(sizeof(struct Node));
  p->data = i;
  t->next = p;
  t = t->next;
 }
 t->next = NULL;
// free(p);
 return Tail;
}
/*
  向链表中插入一个节点(插入在末尾)
*/
LNode* insertNode(LNode *l,int value)
{
 LNode *p,*t;
 t=l;
 while(t->next!=NULL)
 {
  t=t->next;
 }
   
    p=(struct Node*)malloc(sizeof(struct Node));
    p->data=value;
 p->next=NULL;
 t->next=p;
 
 return l;
}
/*
  删除某个节点的值
*/
LNode* DeleteNode(LNode *l,int value)
{
    LNode *p,*r;
 p=l;
    while(p!=NULL)
 {
  r=p->next;//p指向头节点,而头节点在定义时仅仅是一个节点,因此把头节点的下一个节点(第一个节点)
  if (r->data==value)
  {
   p->next=r->next;
   return l;
  }
  p=p->next; 
 }
 return l;
}
/*
  查找某个节点的值
*/
int SearchNode(LNode *l,int pos)
{
 LNode *p;
 int i=1;
 p=l;
 while (p->next!=NULL)
 {
  p=p->next;
  if (i==pos)
  {
   return p->data;
  }
        i++; 
 }
    return 0;
}
void Output(Node *p)
{
 Node *l;
 l = p->next;
 while(l!=NULL)
 {
  printf("%d ",l->data);
  l = l->next;
 }
}

int _tmain(int argc, _TCHAR* argv[])
{
 LNode *tmp;
 Node *head,*p,*l;
 int t;
 head = (struct Node*)malloc(sizeof(struct Node));
 head->next = NULL;
   // tmp = HeadList(head);
 //Output(tmp);
 tmp = TailList(head);
 tmp = insertNode(tmp,5);
 tmp = DeleteNode(tmp,6);
 Output(tmp);
 t = SearchNode(tmp,3);
    printf("%d ",t);
    getchar();
    
    return 0;
}

原文地址:https://www.cnblogs.com/batman425/p/3319903.html