Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.60 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace List
  8. {
  9. public class LinkedList : LinkedListADT
  10. {
  11. public override void InsertFirst(int value)
  12. {
  13. Node tmpHead = new Node
  14. {
  15. Data = value
  16. };
  17.  
  18. if (Head == null)
  19. Head = tmpHead;
  20. else
  21. {
  22. //En kritik nokta: tmpHead'in next'i eski Head'i göstermeli
  23. tmpHead.Next = Head;
  24. //Yeni Head artık tmpHead oldu
  25. Head = tmpHead;
  26. }
  27. //Bağlı listedeki eleman sayısı bir arttı
  28. Size++;
  29. }
  30.  
  31. public override void InsertLast(int value)
  32. {
  33. //Eski sonuncu node, Head'den başlanarak set ediliyor
  34. Node oldLast = Head;
  35.  
  36. if (Head == null)
  37. //Hiç kayıt eklenmediği için InsertFirst çağrılabilir
  38. InsertFirst(value);
  39. else
  40. {
  41. //Yeni sonuncu node yaratılıyor
  42. Node newLast = new Node
  43. {
  44. Data = value
  45. };
  46.  
  47. //Eski sonuncu node bulunuyor
  48. //Tail olsaydı sonuncuyu bulmaya gerek yoktu.
  49. while (oldLast != null)
  50. {
  51. if (oldLast.Next != null)
  52. oldLast = oldLast.Next;
  53. else
  54. break;
  55. }
  56.  
  57. //Eski sonuncu node referansı artık yeni sonuncu node'u gösteriyor
  58. oldLast.Next = newLast;
  59.  
  60. //Bağlı listedeki eleman sayısı bir arttı
  61. Size++;
  62. }
  63. }
  64.  
  65. public override void InsertPos(int position, int value)
  66. {
  67. throw new NotImplementedException();
  68. }
  69.  
  70. public override void DeleteFirst()
  71. {
  72. if (Head != null)
  73. {
  74. //Head'in next'i HeadNext'e atanıyor
  75. Node tempHeadNext = this.Head.Next;
  76. //HeadNext null ise zaten tek kayıt olan Head silinir.
  77. if (tempHeadNext == null)
  78. Head = null;
  79. else
  80. //HeadNext null değilse yeni Head, HeadNext olur.
  81. Head = tempHeadNext;
  82. //Listedeki eleman sayısı bir azaltılıyor
  83. Size--;
  84. }
  85. }
  86.  
  87. public override void DeleteLast()
  88. {
  89. //Last node bulunup NULL yapılacak
  90. Node lastNode = Head;
  91. //Last node'dan bir önceki node'un Next'i null olacak
  92. Node lastPrevNode = null;
  93. while (true)
  94. {
  95. if (lastNode.Next != null)
  96. {
  97. lastPrevNode = lastNode;
  98. lastNode = lastNode.Next;
  99. }
  100. else
  101. break;
  102. }
  103. //Listedeki eleman sayısı bir azaltılıyor
  104. Size--;
  105. //Last node null oldu
  106. lastNode = null;
  107.  
  108. //Last node'dan önceki node varsa onun next'i null olacak yoksa zaten tek kayıt vardır,
  109. //o da Head'dir, o da null olacak
  110. if (lastPrevNode != null)
  111. lastPrevNode.Next = null;
  112. else
  113. Head = null;
  114. }
  115.  
  116. public override void DeletePos(int position)
  117. {
  118. throw new NotImplementedException();
  119. }
  120.  
  121. public override Node GetElement(int position)
  122. {
  123. //Geri dönülecek eleman
  124. Node retNode = null;
  125. //Head'den başlanarak Next node'a gidilecek
  126. Node tempNode = Head;
  127. int count = 0;
  128.  
  129. while (tempNode != null)
  130. {
  131. if (count == position)
  132. {
  133. retNode = tempNode;
  134. break;
  135. }
  136. //Next node'a git
  137. tempNode = tempNode.Next;
  138. count++;
  139. }
  140. return retNode;
  141. }
  142.  
  143. public override string DisplayElements()
  144. {
  145. string temp = "";
  146. Node item = Head;
  147. while (item != null)
  148. {
  149. temp += "-->" + item.Data;
  150. item = item.Next;
  151. }
  152.  
  153. return temp;
  154. }
  155. }
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement