// StructList.cpp : Defines the entry point for the console application.
//顺序链表
//创建
//插入,头,中,末
//删除,头,中,末,整个链表
//反序
//相加
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
typedef struct tagList
{
int data;
struct tagList *next;
};
typedef struct tagList Node;
typedef Node *linkList;
linkList createLinkList(linkList head)
{
linkList newNode = NULL;
linkList currentNode = NULL;
int number;
head = new Node();
cout << "please input some numbers to createList: ";
cin >> number;
head->data = number;
head->next = NULL;
currentNode = head;
while (1)
{
cout << "please input some numbers to createList: ";
cin >> number;
if (number == 0)
{
break;
}
newNode = new Node();
newNode->data = number;
newNode->next = NULL;
currentNode->next = newNode;
currentNode = newNode;
}
return head;
}
linkList insert(linkList head, int choice)
{
linkList currentNode = head;
linkList newNode = NULL;
int number;
int posValue;
switch (choice)
{
case 1:
newNode = new Node();
cout << "please input one number for inserting at begin: ";
cin >> number;
newNode->data = number;
newNode->next = head;
head = newNode;
break;
case 2:
cout << "input one pos value you will insert one number after it: ";
cin >> posValue;
while (currentNode->data != posValue)
{
currentNode = currentNode->next;
}
newNode = new Node();
cout << "please input one number for inserting at middle: ";
cin >> number;
newNode->data = number;
newNode->next = currentNode->next;
currentNode->next = newNode;
break;
case 3:
currentNode = head;
while (currentNode->next != NULL)
{
currentNode = currentNode->next;
}
newNode = new Node();
cout << "please input one number for inserting at end: ";
cin >> number;
newNode->data = number;
newNode->next = currentNode->next;
currentNode->next = newNode;
break;
default:
break;
}
return head;
}
linkList deleteNode(linkList head, int key)
{
linkList currentNode = head;
linkList backNode = NULL;
if (key == head->data)//delete begin node
{
head = head->next;
delete currentNode;
return head;
}
while (currentNode != NULL)
{
if (key == currentNode->data)//delete middle and end node
{
backNode->next = currentNode->next;
delete currentNode;
break;
}
else
{
backNode = currentNode;
currentNode = currentNode->next;
}
}
return head;
}
linkList deleteLinkList(linkList head)
{
linkList currentNode = head;
while (currentNode != NULL)
{
currentNode = currentNode->next;
delete head;
head = currentNode;
}
return head;
}
linkList reverse(linkList head)
{
linkList backNode = head;
linkList nextNode = head->next;
linkList currentNode = nextNode->next;
head->next = NULL;
while (currentNode != NULL)
{
nextNode->next = backNode;//reverse
backNode = nextNode;//backNode forward
nextNode = currentNode;//nextNode forward
currentNode = currentNode->next;//currentNode forward
}
nextNode->next = backNode;//reverse
head = nextNode;
return head;
}
linkList addTwoLists(linkList head1, linkList head2)
{
linkList currentNode = head1;
while (currentNode->next != NULL)
{
currentNode = currentNode->next;
}
currentNode->next = head2;
return head1;
}
void printList(linkList head)
{
cout << "output is: ";
while (head != NULL)
{
cout << head->data << ' ';
head = head->next;
}
cout << endl;
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
linkList head = NULL;
linkList head2 = NULL;
int choice;
int deleteNumber;
head = createLinkList(head);
printList(head);
cout << "your choice for inserting(1,2,3): ";
cin >> choice;
head = insert(head,choice);
printList(head);
cout << "input one number you will delete: ";
cin >> deleteNumber;
head = deleteNode(head, deleteNumber);
printList(head);
cout << "do you want to delete this list?(1 or 0)";
cin >> choice;
if (1 == choice)
head = deleteLinkList(head);
printList(head);
cout << "input 1 to reverse list: ";
cin >> choice;
if (1 == choice)
head = reverse(head);
printList(head);
head2 = createLinkList(head2);
head = addTwoLists(head, head2);
cout << "after adds, ";
printList(head);
return 0;
}
//顺序链表
//创建
//插入,头,中,末
//删除,头,中,末,整个链表
//反序
//相加
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
typedef struct tagList
{
int data;
struct tagList *next;
};
typedef struct tagList Node;
typedef Node *linkList;
linkList createLinkList(linkList head)
{
linkList newNode = NULL;
linkList currentNode = NULL;
int number;
head = new Node();
cout << "please input some numbers to createList: ";
cin >> number;
head->data = number;
head->next = NULL;
currentNode = head;
while (1)
{
cout << "please input some numbers to createList: ";
cin >> number;
if (number == 0)
{
break;
}
newNode = new Node();
newNode->data = number;
newNode->next = NULL;
currentNode->next = newNode;
currentNode = newNode;
}
return head;
}
linkList insert(linkList head, int choice)
{
linkList currentNode = head;
linkList newNode = NULL;
int number;
int posValue;
switch (choice)
{
case 1:
newNode = new Node();
cout << "please input one number for inserting at begin: ";
cin >> number;
newNode->data = number;
newNode->next = head;
head = newNode;
break;
case 2:
cout << "input one pos value you will insert one number after it: ";
cin >> posValue;
while (currentNode->data != posValue)
{
currentNode = currentNode->next;
}
newNode = new Node();
cout << "please input one number for inserting at middle: ";
cin >> number;
newNode->data = number;
newNode->next = currentNode->next;
currentNode->next = newNode;
break;
case 3:
currentNode = head;
while (currentNode->next != NULL)
{
currentNode = currentNode->next;
}
newNode = new Node();
cout << "please input one number for inserting at end: ";
cin >> number;
newNode->data = number;
newNode->next = currentNode->next;
currentNode->next = newNode;
break;
default:
break;
}
return head;
}
linkList deleteNode(linkList head, int key)
{
linkList currentNode = head;
linkList backNode = NULL;
if (key == head->data)//delete begin node
{
head = head->next;
delete currentNode;
return head;
}
while (currentNode != NULL)
{
if (key == currentNode->data)//delete middle and end node
{
backNode->next = currentNode->next;
delete currentNode;
break;
}
else
{
backNode = currentNode;
currentNode = currentNode->next;
}
}
return head;
}
linkList deleteLinkList(linkList head)
{
linkList currentNode = head;
while (currentNode != NULL)
{
currentNode = currentNode->next;
delete head;
head = currentNode;
}
return head;
}
linkList reverse(linkList head)
{
linkList backNode = head;
linkList nextNode = head->next;
linkList currentNode = nextNode->next;
head->next = NULL;
while (currentNode != NULL)
{
nextNode->next = backNode;//reverse
backNode = nextNode;//backNode forward
nextNode = currentNode;//nextNode forward
currentNode = currentNode->next;//currentNode forward
}
nextNode->next = backNode;//reverse
head = nextNode;
return head;
}
linkList addTwoLists(linkList head1, linkList head2)
{
linkList currentNode = head1;
while (currentNode->next != NULL)
{
currentNode = currentNode->next;
}
currentNode->next = head2;
return head1;
}
void printList(linkList head)
{
cout << "output is: ";
while (head != NULL)
{
cout << head->data << ' ';
head = head->next;
}
cout << endl;
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
linkList head = NULL;
linkList head2 = NULL;
int choice;
int deleteNumber;
head = createLinkList(head);
printList(head);
cout << "your choice for inserting(1,2,3): ";
cin >> choice;
head = insert(head,choice);
printList(head);
cout << "input one number you will delete: ";
cin >> deleteNumber;
head = deleteNode(head, deleteNumber);
printList(head);
cout << "do you want to delete this list?(1 or 0)";
cin >> choice;
if (1 == choice)
head = deleteLinkList(head);
printList(head);
cout << "input 1 to reverse list: ";
cin >> choice;
if (1 == choice)
head = reverse(head);
printList(head);
head2 = createLinkList(head2);
head = addTwoLists(head, head2);
cout << "after adds, ";
printList(head);
return 0;
}