<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=LinkedList%2F%EC%98%81%EB%8F%99</id>
	<title>LinkedList/영동 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=LinkedList%2F%EC%98%81%EB%8F%99"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=LinkedList/%EC%98%81%EB%8F%99&amp;action=history"/>
	<updated>2026-05-14T08:54:47Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=LinkedList/%EC%98%81%EB%8F%99&amp;diff=34177&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=LinkedList/%EC%98%81%EB%8F%99&amp;diff=34177&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:38Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;* 예전에 1학년 때 잘못된 방법으로 짠 것을 이제야 제대로(?) 고쳐서 올립니다. 창피한 역사는 빨리 지워버려야...&lt;br /&gt;
== 그냥 링크드 리스트 ==&lt;br /&gt;
 #include&amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 struct Node{				//Structure &amp;#039;Node&amp;#039; has its own data and link to next node &lt;br /&gt;
 	int data;				//Data of node&lt;br /&gt;
 	Node * nextNode;		//Address value of next node&lt;br /&gt;
 	Node(int initialData){	//Constructor with initializing data&lt;br /&gt;
 		data=initialData;	//Assign data &lt;br /&gt;
 		nextNode=&amp;#039;\0&amp;#039;;		//Assign null value to address of next node&lt;br /&gt;
 	}&lt;br /&gt;
 	Node(){}				//An empty constructor to reduce warning in compile time&lt;br /&gt;
 	&lt;br /&gt;
 };&lt;br /&gt;
 int enterData();			//Function which enter the data of node&lt;br /&gt;
 void displayList(Node * argNode);	//Function which displays the elements of linked list &lt;br /&gt;
 Node * allocateNewNode(Node * argNode, int argData);//Function which allocate new node in memory&lt;br /&gt;
 int main()&lt;br /&gt;
 {	&lt;br /&gt;
 	Node * firstAddress=new Node(enterData());//Create the first address to linked list&lt;br /&gt;
 	Node * currentNode;//Create temporary node which indicates the last node of linked list&lt;br /&gt;
 	currentNode=firstAddress;&lt;br /&gt;
 	&lt;br /&gt;
 	//Create the next node to linked list&lt;br /&gt;
 	for(int i=0;i&amp;amp;lt;7;i++)&lt;br /&gt;
 		currentNode=allocateNewNode(currentNode, enterData());&lt;br /&gt;
 	displayList(firstAddress);&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 void displayList(Node * argNode)&lt;br /&gt;
 {&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;Address\t   Data Value\tNext Address\n&amp;quot;;&lt;br /&gt;
 	Node * tempNode;		//Temporary node to tour linked list&lt;br /&gt;
 	tempNode=argNode;		&lt;br /&gt;
 	do{&lt;br /&gt;
 		cout&amp;amp;lt;&amp;amp;lt;tempNode&amp;amp;lt;&amp;amp;lt;&amp;quot;\t&amp;quot;&amp;amp;lt;&amp;amp;lt;tempNode-&amp;amp;gt;data&amp;amp;lt;&amp;amp;lt;&amp;quot;\t&amp;quot;&amp;amp;lt;&amp;amp;lt;tempNode-&amp;amp;gt;nextNode&amp;amp;lt;&amp;amp;lt;&amp;quot;\n&amp;quot;;&lt;br /&gt;
 		if(tempNode-&amp;amp;gt;nextNode==&amp;#039;\0&amp;#039;)//Exit from do-while loop if value of next node is null&lt;br /&gt;
 			break;&lt;br /&gt;
 		else				//Go to the next node if there is next node&lt;br /&gt;
 			tempNode=tempNode-&amp;amp;gt;nextNode;&lt;br /&gt;
 	}while(1);&lt;br /&gt;
 }&lt;br /&gt;
 Node * allocateNewNode(Node * argNode, int argData)&lt;br /&gt;
 {&lt;br /&gt;
 	argNode-&amp;amp;gt;nextNode=new Node(argData);&lt;br /&gt;
 	return argNode-&amp;amp;gt;nextNode; &lt;br /&gt;
 }&lt;br /&gt;
 int enterData()&lt;br /&gt;
 {&lt;br /&gt;
 	int returnData;&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;Node에 들어갈 데이터 값을 입력하시오.&amp;quot;;&lt;br /&gt;
 	cin&amp;amp;gt;&amp;amp;gt;returnData;&lt;br /&gt;
 	return returnData;&lt;br /&gt;
 }&lt;br /&gt;
== 자유공간리스트(?) 사용 ==&lt;br /&gt;
* 숙제 스펙(자유공간리스트) 맞추느라 좀 지저분하네요. 조만간 필요없는 부분은 지워서... &lt;br /&gt;
 #include&amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 struct Node{				//Structure &amp;#039;Node&amp;#039; has its own data and link to next node &lt;br /&gt;
 	int data;				//Data of node&lt;br /&gt;
 	Node * nextNode;		//Address value of next node&lt;br /&gt;
 	Node(int initialData){	//Constructor with initializing data&lt;br /&gt;
 		data=initialData;	//Assign data &lt;br /&gt;
 		nextNode=&amp;#039;\0&amp;#039;;		//Assign null value to address of next node&lt;br /&gt;
 	}&lt;br /&gt;
 	Node(){nextNode=&amp;#039;\0&amp;#039;;}	//An empty constructor to reduce warning in compile time&lt;br /&gt;
 };&lt;br /&gt;
 #define MAX_OF_LIST 8		//Maximum number of linked list and free space list &lt;br /&gt;
 int enterData();	//Function which enter the data of node&lt;br /&gt;
 void displayList(Node * argNode);	//Function which displays the elements of linked list &lt;br /&gt;
 Node * allocateNewNode(Node * argNode, int argData, int * argNumberOfElements);//Function which allocates new node in memory&lt;br /&gt;
 Node * reverseList(Node * argNode);//Function which reverses the sequence of the list&lt;br /&gt;
 void eraseLastNode(Node * argNode, Node ** argFreeNode, int * argNumberOfList, int * argNumberOfFreeSpace);//Function which deletes the last node of the list&lt;br /&gt;
 void getNode(Node * argNode, Node ** argFreeNode, int * argNumberOfList, int * argNumberOfFreeSpace);//Function which takes the node from free space list&lt;br /&gt;
 void returnNode(Node * argNode, Node ** argFreeNode, int * argNumberOfList, int * argNumberOfFreeSpace);//Function which return a node of linked list to free space list&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {	&lt;br /&gt;
 	int elementsOfLinkedList=0;&lt;br /&gt;
 	int elementsOfFreeSpaceList=0;&lt;br /&gt;
 	Node * firstAddress=new Node(enterData());//Create the first address to linked list&lt;br /&gt;
 	elementsOfLinkedList++;//Set 1 to number of node.&lt;br /&gt;
 	Node * currentNode;//Create temporary node which indicates the last node of linked list&lt;br /&gt;
 	Node * freeSpaceList=NULL;//Create free space list&lt;br /&gt;
 	currentNode=firstAddress;&lt;br /&gt;
 	&lt;br /&gt;
 	//Create the next node to linked list&lt;br /&gt;
 	for(int i=0;i&amp;amp;lt;8;i++)&lt;br /&gt;
 		currentNode=allocateNewNode(currentNode, enterData(), &amp;amp;amp;elementsOfLinkedList);&lt;br /&gt;
 	&lt;br /&gt;
 	displayList(firstAddress);&lt;br /&gt;
 	firstAddress=reverseList(firstAddress);&lt;br /&gt;
 	displayList(firstAddress);//Display reversed list&lt;br /&gt;
 &lt;br /&gt;
 	eraseLastNode(firstAddress, &amp;amp;amp;freeSpaceList, &amp;amp;amp;elementsOfLinkedList, &amp;amp;amp;elementsOfFreeSpaceList);&lt;br /&gt;
 	eraseLastNode(firstAddress, &amp;amp;amp;freeSpaceList, &amp;amp;amp;elementsOfLinkedList, &amp;amp;amp;elementsOfFreeSpaceList);&lt;br /&gt;
 	eraseLastNode(firstAddress, &amp;amp;amp;freeSpaceList, &amp;amp;amp;elementsOfLinkedList, &amp;amp;amp;elementsOfFreeSpaceList);&lt;br /&gt;
 	eraseLastNode(firstAddress, &amp;amp;amp;freeSpaceList, &amp;amp;amp;elementsOfLinkedList, &amp;amp;amp;elementsOfFreeSpaceList);&lt;br /&gt;
 &lt;br /&gt;
 	displayList(firstAddress);//Display the linked list with modified data&lt;br /&gt;
 	displayList(freeSpaceList);//Display free space list with deleted data from linked list&lt;br /&gt;
 	&lt;br /&gt;
 	getNode(firstAddress, &amp;amp;amp;freeSpaceList, &amp;amp;amp;elementsOfLinkedList, &amp;amp;amp;elementsOfFreeSpaceList);&lt;br /&gt;
 	getNode(firstAddress, &amp;amp;amp;freeSpaceList, &amp;amp;amp;elementsOfLinkedList, &amp;amp;amp;elementsOfFreeSpaceList);&lt;br /&gt;
 	getNode(firstAddress, &amp;amp;amp;freeSpaceList, &amp;amp;amp;elementsOfLinkedList, &amp;amp;amp;elementsOfFreeSpaceList);&lt;br /&gt;
 	getNode(firstAddress, &amp;amp;amp;freeSpaceList, &amp;amp;amp;elementsOfLinkedList, &amp;amp;amp;elementsOfFreeSpaceList);&lt;br /&gt;
 &lt;br /&gt;
 	displayList(firstAddress);//Display the linked list with data which are taken from free space list&lt;br /&gt;
 	displayList(freeSpaceList);//Display the empty free space list&lt;br /&gt;
 &lt;br /&gt;
 	returnNode(firstAddress, &amp;amp;amp;freeSpaceList, &amp;amp;amp;elementsOfLinkedList, &amp;amp;amp;elementsOfFreeSpaceList);&lt;br /&gt;
 	displayList(firstAddress);&lt;br /&gt;
 	displayList(freeSpaceList);&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 void displayList(Node * argNode)&lt;br /&gt;
 {&lt;br /&gt;
 	Node * tempNode;		//Temporary node to tour linked list&lt;br /&gt;
 	tempNode=argNode;&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;Address\t   Data Value\tNext Address\n&amp;quot;;&lt;br /&gt;
 	do{&lt;br /&gt;
 		if(tempNode==NULL)&lt;br /&gt;
 		{&lt;br /&gt;
 			cout&amp;amp;lt;&amp;amp;lt;&amp;quot;Sorry... There is no node to display.\n&amp;quot;;&lt;br /&gt;
 			break;&lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 		{&lt;br /&gt;
 			cout&amp;amp;lt;&amp;amp;lt;tempNode&amp;amp;lt;&amp;amp;lt;&amp;quot;\t&amp;quot;&amp;amp;lt;&amp;amp;lt;tempNode-&amp;amp;gt;data&amp;amp;lt;&amp;amp;lt;&amp;quot;\t&amp;quot;&amp;amp;lt;&amp;amp;lt;tempNode-&amp;amp;gt;nextNode&amp;amp;lt;&amp;amp;lt;&amp;quot;\n&amp;quot;;&lt;br /&gt;
 			if(tempNode-&amp;amp;gt;nextNode==NULL)//Exit from do-while loop if value of next node is null&lt;br /&gt;
 				break;&lt;br /&gt;
 			else				//Go to the next node if there is next node&lt;br /&gt;
 				tempNode=tempNode-&amp;amp;gt;nextNode;&lt;br /&gt;
 		}&lt;br /&gt;
 	}while(1);&lt;br /&gt;
 }&lt;br /&gt;
 Node * allocateNewNode(Node * argNode, int argData, int * argNumberOfElements)&lt;br /&gt;
 {&lt;br /&gt;
 	if((*argNumberOfElements)&amp;amp;gt;=MAX_OF_LIST)&lt;br /&gt;
 	{&lt;br /&gt;
 		cout&amp;amp;lt;&amp;amp;lt;&amp;quot;Out of maximum size of memory! Your input will be cancelled.&amp;quot;&amp;amp;lt;&amp;amp;lt;endl;&lt;br /&gt;
 		return NULL;&lt;br /&gt;
 	}&lt;br /&gt;
 	(*argNumberOfElements)++;&lt;br /&gt;
 	argNode-&amp;amp;gt;nextNode=new Node(argData);&lt;br /&gt;
 	return argNode-&amp;amp;gt;nextNode; &lt;br /&gt;
 }&lt;br /&gt;
 int enterData()&lt;br /&gt;
 {&lt;br /&gt;
 	int returnData;&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;Please input the data to the node.&amp;quot;;&lt;br /&gt;
 	cin&amp;amp;gt;&amp;amp;gt;returnData;&lt;br /&gt;
 	return returnData;&lt;br /&gt;
 	&lt;br /&gt;
 }&lt;br /&gt;
 Node * reverseList(Node * argNode)&lt;br /&gt;
 {&lt;br /&gt;
 	Node * firstTempNode;&lt;br /&gt;
 	Node * secondTempNode=NULL;&lt;br /&gt;
 	Node * thirdTempNode=argNode;&lt;br /&gt;
 	while(thirdTempNode!=NULL)&lt;br /&gt;
 	{&lt;br /&gt;
 		firstTempNode=secondTempNode;&lt;br /&gt;
 		secondTempNode=thirdTempNode;&lt;br /&gt;
 		thirdTempNode=thirdTempNode-&amp;amp;gt;nextNode;//Go one step to next node&lt;br /&gt;
 		secondTempNode-&amp;amp;gt;nextNode=firstTempNode;&lt;br /&gt;
 	}&lt;br /&gt;
 	argNode=secondTempNode;//Set address of the last node at first address&lt;br /&gt;
 	return argNode;&lt;br /&gt;
 }&lt;br /&gt;
 void eraseLastNode(Node * argNode, Node ** argFreeNode, int * argNumberOfList, int * argNumberOfFreeSpace)&lt;br /&gt;
 {&lt;br /&gt;
 	Node * tempNode=argNode;&lt;br /&gt;
 	Node * tempPreviousNode;&lt;br /&gt;
 	Node ** tempFreeNode=argFreeNode;&lt;br /&gt;
 	if(tempNode==NULL)&lt;br /&gt;
 		cout&amp;amp;lt;&amp;amp;lt;&amp;quot;You have no node to erase.\n&amp;quot;;&lt;br /&gt;
 	else&lt;br /&gt;
 	{&lt;br /&gt;
 		while(tempNode-&amp;amp;gt;nextNode!=NULL)&lt;br /&gt;
 		{//Go to the last node of the linked list&lt;br /&gt;
 			tempPreviousNode=tempNode;&lt;br /&gt;
 			tempNode=tempNode-&amp;amp;gt;nextNode;&lt;br /&gt;
 		}//Save the last node and the second node at back&lt;br /&gt;
 		if(tempNode-&amp;amp;gt;nextNode==NULL)&lt;br /&gt;
 		{//At the last node,&lt;br /&gt;
 			if((*argNumberOfList)&amp;amp;gt;0 &amp;amp;amp;&amp;amp;amp; (*argNumberOfFreeSpace)&amp;amp;lt;MAX_OF_LIST)&lt;br /&gt;
 			{&lt;br /&gt;
 				if(*argFreeNode==NULL)&lt;br /&gt;
 				{//If free space list is empty&lt;br /&gt;
 					*argFreeNode=tempPreviousNode-&amp;amp;gt;nextNode;&lt;br /&gt;
 					tempPreviousNode-&amp;amp;gt;nextNode=NULL;&lt;br /&gt;
 				}//Link the last node of the linked list to free space list&lt;br /&gt;
 				else&lt;br /&gt;
 				{//If free space list has one node at least&lt;br /&gt;
 					tempNode-&amp;amp;gt;nextNode=*argFreeNode;&lt;br /&gt;
 					*argFreeNode=tempPreviousNode-&amp;amp;gt;nextNode;&lt;br /&gt;
 					(*argFreeNode)-&amp;amp;gt;nextNode=(*tempFreeNode)-&amp;amp;gt;nextNode;&lt;br /&gt;
 					tempPreviousNode-&amp;amp;gt;nextNode=NULL;&lt;br /&gt;
 				}/*Link the Free space list to the last node of linked list and&lt;br /&gt;
 				   link the last node of the linked list to free space list*/&lt;br /&gt;
 				(*argNumberOfList)--;&lt;br /&gt;
 				(*argNumberOfFreeSpace)++;&lt;br /&gt;
 			}&lt;br /&gt;
 			else&lt;br /&gt;
 				cout&amp;amp;lt;&amp;amp;lt;&amp;quot;An error occurs in erasing process.&amp;quot;&amp;amp;lt;&amp;amp;lt;endl;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 void getNode(Node * argNode, Node ** argFreeNode, int * argNumberOfList, int * argNumberOfFreeSpace)&lt;br /&gt;
 {&lt;br /&gt;
 	Node * tempNode=argNode;&lt;br /&gt;
 	Node ** tempFreeNode=argFreeNode;&lt;br /&gt;
 	if(*tempFreeNode==NULL)&lt;br /&gt;
 		cout&amp;amp;lt;&amp;amp;lt;&amp;quot;You have no node to reuse in free space list.\n&amp;quot;;&lt;br /&gt;
 	else&lt;br /&gt;
 	{&lt;br /&gt;
 		while(tempNode-&amp;amp;gt;nextNode!=NULL)&lt;br /&gt;
 		{//Go to the last node of linked list&lt;br /&gt;
 			tempNode=tempNode-&amp;amp;gt;nextNode;&lt;br /&gt;
 		}&lt;br /&gt;
 		if((*argNumberOfList)&amp;amp;lt;MAX_OF_LIST &amp;amp;amp;&amp;amp;amp; (*argNumberOfFreeSpace)&amp;amp;gt;0)&lt;br /&gt;
 		{&lt;br /&gt;
 			if(tempNode-&amp;amp;gt;nextNode==NULL)&lt;br /&gt;
 			{//Link the first node of free space list to the last node of linked list&lt;br /&gt;
 				tempNode-&amp;amp;gt;nextNode=(*tempFreeNode);&lt;br /&gt;
 				(*tempFreeNode)=(*tempFreeNode)-&amp;amp;gt;nextNode;&lt;br /&gt;
 				tempNode-&amp;amp;gt;nextNode-&amp;amp;gt;nextNode=NULL;&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 			cout&amp;amp;lt;&amp;amp;lt;&amp;quot;An error occurs in getting process.&amp;quot;&amp;amp;lt;&amp;amp;lt;endl;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 void returnNode(Node * argNode, Node ** argFreeNode, int * argNumberOfList, int * argNumberOfFreeSpace)&lt;br /&gt;
 {&lt;br /&gt;
 	Node * tempNode=argNode;&lt;br /&gt;
 	Node ** tempFreeNode=argFreeNode;&lt;br /&gt;
 	Node * tempPreviousNode;&lt;br /&gt;
 	if(tempNode==NULL)&lt;br /&gt;
 		cout&amp;amp;lt;&amp;amp;lt;&amp;quot;You have no node to return.\n&amp;quot;;&lt;br /&gt;
 	else&lt;br /&gt;
 	{&lt;br /&gt;
 		int returnData;&lt;br /&gt;
 		cout&amp;amp;lt;&amp;amp;lt;&amp;quot;Input the data value of node that you want to return to the free space list.&amp;quot;&amp;amp;lt;&amp;amp;lt;endl;&lt;br /&gt;
 		cin&amp;amp;gt;&amp;amp;gt;returnData;&lt;br /&gt;
 		//Input data which you want to return to free space list&lt;br /&gt;
 		while(tempNode-&amp;amp;gt;nextNode!=NULL)&lt;br /&gt;
 		{//Go to the last node of the linked list&lt;br /&gt;
 			if((*argNumberOfList)&amp;amp;gt;0 &amp;amp;amp;&amp;amp;amp; (*argNumberOfFreeSpace)&amp;amp;lt;MAX_OF_LIST)&lt;br /&gt;
 			{&lt;br /&gt;
 				if(tempNode-&amp;amp;gt;data==returnData)&lt;br /&gt;
 				{//Search the data which you entered&lt;br /&gt;
 					cout&amp;amp;lt;&amp;amp;lt;&amp;quot;You want to return node with &amp;quot;&amp;amp;lt;&amp;amp;lt;returnData&amp;amp;lt;&amp;amp;lt;endl;&lt;br /&gt;
 					tempPreviousNode-&amp;amp;gt;nextNode=tempNode-&amp;amp;gt;nextNode;&lt;br /&gt;
 					if(*argFreeNode!=NULL)&lt;br /&gt;
 						tempNode-&amp;amp;gt;nextNode=(*argFreeNode)-&amp;amp;gt;nextNode;&lt;br /&gt;
 					else&lt;br /&gt;
 						tempNode-&amp;amp;gt;nextNode=NULL;&lt;br /&gt;
 					*argFreeNode=tempNode;&lt;br /&gt;
 					(*argNumberOfList)--;&lt;br /&gt;
 					(*argNumberOfFreeSpace)++;&lt;br /&gt;
 				}&lt;br /&gt;
 				else&lt;br /&gt;
 				{&lt;br /&gt;
 					tempPreviousNode=tempNode;&lt;br /&gt;
 					tempNode=tempNode-&amp;amp;gt;nextNode;&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 			else&lt;br /&gt;
 				cout&amp;amp;lt;&amp;amp;lt;&amp;quot;An error occurs in returning process.&amp;quot;&amp;amp;lt;&amp;amp;lt;endl;&lt;br /&gt;
 		}//Save the last node and the second node at back&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
----&lt;br /&gt;
작성자: [[Yggdrasil]]&lt;br /&gt;
----&lt;br /&gt;
[[LinkedList]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>