您的位置:首页 > 理论基础 > 数据结构算法

数据结构-链表创建,删除,插入,反转,连接

2014-02-20 23:36 357 查看
// 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;<
abc4
br />

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 链表 c++