linklist.h
#pragma once
#include <stddef.h>
using namespace std;
typedef struct Node {
int n;
int value_x;
int value_y;
Node * next;
Node ( int n, int value_x, int value_y) : n ( n) , value_x ( value_x) , value_y ( value_y) , next ( NULL ) { } ;
Node ( ) { } ;
} SNode;
class LinkList {
public:
void create ( ) ;
void insertHead ( SNode* p) ;
void insertTail ( SNode* p) ;
SNode* findByIndex ( int ) ;
SNode* findByValue ( int ) ;
int getLength ( ) ;
void deleteByIndex ( int ) ;
void deleteByValueOnce ( int ) ;
void deleteByValueAll ( int ) ;
void editByIndex ( int , int ) ;
void print ( ) ;
void clear ( ) ;
SNode* head;
} ;
linklist.cpp
#include "stdafx.h"
#include "LinkList.h"
void LinkList: : create ( )
{
head = new Node ( ) ;
head-> next = NULL ;
head-> n = 0 ;
}
void LinkList: : insertHead ( Node * p)
{
p-> next = head-> next;
head-> next = p;
head-> n++ ;
}
void LinkList: : insertTail ( Node * p)
{
Node * tail = findByIndex ( head-> n) ;
if ( tail == NULL )
insertHead ( p) ;
else {
p-> next = tail-> next;
tail-> next = p;
}
head-> n++ ;
}
Node * LinkList: : findByIndex ( int index)
{
Node* p = head;
int i = 0 ;
if ( index< 0 || index > getLength ( ) ) {
return NULL ;
}
while ( p) {
if ( i == index)
return p;
else {
p = p-> next;
i++ ;
}
}
return NULL ;
}
Node * LinkList: : findByValue ( int num)
{
Node* p = head-> next;
for ( ; p; p = p-> next) {
if ( p-> value_x == num)
return p;
}
return NULL ;
}
int LinkList: : getLength ( )
{
return head-> n;
}
void LinkList: : deleteByIndex ( int index)
{
if ( index == 0 ) {
return ;
}
Node* p = findByIndex ( index) ;
if ( ! p) {
return ;
}
else {
Node* q = findByIndex ( index - 1 ) ;
q-> next = p-> next;
head-> n-- ;
delete p;
}
}
void LinkList: : deleteByValueAll ( int n)
{
Node* p = head-> next;
Node* q = head;
bool flag = false;
while ( p) {
if ( p-> n == n) {
q-> next = p-> next;
Node* temp = p;
p = p-> next;
delete temp;
head-> n-- ;
if ( p-> n != n)
flag = true;
}
else {
p = p-> next;
q = q-> next;
}
}
if ( ! flag) {
return ;
}
}
void LinkList: : print ( )
{
for ( Node* p = head-> next; p; p = p-> next) {
}
}
void LinkList: : clear ( )
{
while ( head-> next)
{
deleteByIndex ( getLength ( ) ) ;
}
}