2013-10-30 2 views
2

이 링크 된 목록으로 돌아갈 수 있어야합니다.하지만 시도해도 문제가 없습니다. 올바른 방향으로 나를 가리킬 수 있습니까?어떻게 링크 된 목록을 뒤집을 수 있습니까?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
namespace Student 
{ 
    class Program 
    { 
     public class student_data 
     { 
      public string forename; 
      public string surname; 
      public int id_number; 
      public float averageGrade; 
      public string programme_title;  
      public string programme_code; 
      public student_data nextItem; 
      //Declaring public title and public code as a string 
     } 

     // Notice that a reference to the struct is being passed in 
     static void populatestudent(out student_data student, string 

     fname, string surname, int id_number, string ptitle, string pcode) 
     { 
      student = new student_data(); 
      student.forename = fname; 
      student.surname = surname; 
      student.id_number = id_number; 
      student.averageGrade = 0.0F; 
      student.programme_title = ptitle; 
      student.programme_code = pcode; 
      //populating structre code by adding p code and p title 
     } 

     static void Main(string[] args) 
     { 
      student_data student0, student1, student2, student3; 

      populatestudent(out student0, "Mark", "Anderson", 0, "Progrmming Language", "M9604");//student 0 info 
      populatestudent(out student1, "Jon", "Smith", 1, "Progrmming Language", "M9604");//student 1 info 
      populatestudent(out student2, "Tom", "Jones", 2, "Progrmming Language", "M9604");//student 3 info 
      populatestudent(out student3, "Ewan", "Evans", 3, "Progrmming Language", "M9604");//student 4 info 

      student_data head = student0; 
      student_data tail = student3; 

      head.nextItem = student0; 
      student0.nextItem = student1; 
      student1.nextItem = student2; 
      student2.nextItem = student3; 

      student_data current = head; 
      while (current != null) 
      { 
       Console.WriteLine("Name: " + current.forename + " " + current.surname); 
       Console.WriteLine("Id: " + current.id_number); 
       Console.WriteLine("Av grade: " + current.averageGrade); 
       Console.WriteLine("Prog title: " + current.programme_title);//find and display students programme title 
       Console.WriteLine("Prog code: " + current.programme_code); 
       current = current.nextItem; 
      } 
      Console.ReadKey(); 
     } 
    } 
} 
+0

.prevItem()을 추가하면 더 쉽게 사용할 수 있습니다. –

답변

14

연결된 목록은 singly linked입니다. 각 항목에는 다음 항목에 대한 참조가 있지만 이전 항목은 포함되어 있지 않습니다. 너 수 없습니다 그런 목록을 통해 거꾸로 걸어. (모든 항목이있는 다른 컬렉션을 효과적으로 만들지 않고) doubly linked list을 대신 생성해야합니다. 그럼 쉽습니다. 단일 링크 및 이중 링크 목록에 대해 자세히 알아 보려면 링크 (따옴표 없음)를 따르십시오.

도 다음과 같이 .NET 명명 규칙을 시작하고 공개 입력란 대신 속성을 사용하는 것이 좋습니다.

1

재귀를 사용하여 역순으로 반복 처리 할 수 ​​있습니다. 예 :

private void recurse(student_data current) 
{ 
    if(current.nextItem != null) 
     recurse(current.nextItem); 
    //Do your iteration logic here 
    Console.WriteLine("Name: " + current.forename + " " + current.surname); 
    Console.WriteLine("Id: " + current.id_number); 
    Console.WriteLine("Av grade: " + current.averageGrade); 
    Console.WriteLine("Prog title: " + current.programme_title);//find and display students programme title 
    Console.WriteLine("Prog code: " + current.programme_code); 
} 

그런 다음 목록 헤드를 재귀 메소드에 전달하면됩니다.

+0

예, 호출 스택을 활용하지 않고 목록의 모든 항목을 'Stack '으로 푸시하는 것이 더 좋을 수도 있지만 가능합니다. 같은 끝. – spender

관련 문제