In danh sách liên kết chuyển tiếp C++

Xin chào các bạn, đảo ngược danh sách được liên kết là một vấn đề mã hóa phổ biến trong các cuộc phỏng vấn Việc làm Lập trình và tôi chắc rằng bạn đã từng gặp điều này trong sự nghiệp của mình, nếu chưa, có thể bạn là người mới hơn và bạn sẽ tìm hiểu về . Trong bài viết trước, tôi đã hướng dẫn các bạn cách sử dụng đệ quy để đảo ngược danh sách liên kết, và hôm nay, tôi sẽ hướng dẫn các bạn cách đảo ngược danh sách liên kết đơn trong Java mà không cần đệ quy. Danh sách liên kết đơn hay còn gọi là danh sách chỉ liên kết là tập hợp các nút chỉ có thể duyệt theo một hướng như theo chiều thuận từ đầu đến đuôi. Mỗi nút trong danh sách liên kết chứa hai thứ, dữ liệu và một con trỏ tới nút tiếp theo trong danh sách.

Để đảo danh sách liên kết ta cần lặp qua danh sách, ở mỗi bước ta cần đảo liên kết như sau lần lặp đầu tiên head sẽ trỏ đến null và phần tử tiếp theo .

Ở cuối quá trình duyệt khi bạn đến phần đuôi của danh sách được liên kết, phần đuôi sẽ trỏ đến phần tử cuối cùng thứ hai và nó sẽ trở thành một phần đầu mới vì bây giờ bạn có thể duyệt qua tất cả các phần tử từ danh sách này .

Vì chúng tôi không thể sử dụng  java. sử dụng. LinkedList  để minh họa ví dụ này, vì đây là danh sách được liên kết đôi và cũng như trong hầu hết thời gian phỏng vấn lập trình, Người phỏng vấn sẽ không cho phép bạn sử dụng các lớp Java hoặc API hiện có.

Dù sao đi nữa, trong danh sách liên kết đôi, bạn có thể duyệt theo cả hai hướng như tiến và lùi vì mỗi nút chứa tham chiếu đến cả nút trước và nút tiếp theo.

Nhân tiện, nếu bạn không quen thuộc với cấu trúc dữ liệu danh sách được liên kết, tốt hơn hết là bạn nên tham gia một khóa học về thuật toán và cấu trúc dữ liệu tốt như Cấu trúc dữ liệu và thuật toán. Tìm hiểu sâu Sử dụng Java để tìm hiểu thêm về cấu trúc dữ liệu danh sách được liên kết.





Triển khai danh sách liên kết của riêng bạn trong các cuộc phỏng vấn

Vì việc sử dụng các lớp Java hiện có hiện được cho phép trong các cuộc phỏng vấn Việc làm Lập trình, nên bạn cần tạo lớp của riêng mình để viết mã. Trong ví dụ này, tôi đã tạo lớp danh sách liên kết đơn của riêng mình. Tương tự với java. sử dụng. LinkedList  cũng chứa một lớp tĩnh lồng nhau Nút , đại diện cho một nút trong danh sách được liên kết.

Lớp này chứa thuộc tính số nguyên để giữ phần dữ liệu và một Nút khác . Nếu bạn muốn tạo một danh sách liên kết Chung, bạn nên thay thế reference to point to the next one in the list. If you want to create a Generic linked list, you should replace int bằng T, a generic type, as shown here.

Để chứng minh rằng phương pháp đảo ngược của chúng ta đang hoạt động, chúng ta không chỉ phải tạo một danh sách được liên kết mà còn cần điền vào danh sách được liên kết. Để điền, bạn cần triển khai phương thức add() trên danh sách liên kết đơn.

Bạn có hai lựa chọn, thêm phần tử ở đầu hoặc ở phần đuôi, việc thêm phần tử vào phần đầu rất dễ dàng vì nó không yêu cầu duyệt cho đến cuối nhưng nếu bạn muốn .

Tôi cũng đã tạo một phương thức print() để in tất cả các nút của danh sách liên kết đơn, được phân tách bằng dấu cách. Phương pháp này rất hữu ích để chứng minh rằng phương pháp đảo ngược của chúng ta có thực sự hoạt động hay không, vì bạn có thể in danh sách được liên kết trước và sau khi đảo ngược.

Nếu bạn gặp khó khăn với việc triển khai các cấu trúc dữ liệu thiết yếu như danh sách được liên kết, cây nhị phân, bảng băm bằng mã của riêng bạn trên bất kỳ ngôn ngữ lập trình nào như Java thì tôi khuyên bạn nên tham gia Thuật toán và cấu trúc dữ liệu - Phần 1 . Chúng sẽ không chỉ giúp bạn viết cấu trúc dữ liệu mà còn cả cách tính toán độ phức tạp của không gian và thời gian.

In danh sách liên kết chuyển tiếp C++





Chương trình Java đảo ngược danh sách liên kết đơn mà không cần đệ quy

Đây là chương trình mẫu của chúng tôi để trình bày cách đảo ngược danh sách liên kết trong Java. Để đảo ngược, trước tiên tôi đã tạo một lớp có tên là SinglyLinkedList , đại diện cho cấu trúc dữ liệu danh sách được liên kết. Tôi đã triển khai thêm phương thức add()print() để thêm .

Logic đảo ngược danh sách liên kết được gói gọn bên trong phương thức reverse() . Nó duyệt qua danh sách liên kết từ đầu đến đuôi và đảo ngược liên kết trong từng bước giống như từng nút thay vì trỏ đến phần tử tiếp theo bắt đầu trỏ đến nút trước, theo cách này, toàn bộ danh sách được liên kết sẽ bị đảo ngược khi bạn đến phần tử cuối cùng, điều này .

Đây là một sơ đồ hay giải thích thuật toán đảo ngược danh sách liên kết mà không cần đệ quy trong Java.

In danh sách liên kết chuyển tiếp C++



Bạn có thể thấy rằng các liên kết được đảo ngược trong mỗi bước bằng cách sử dụng trước đó và tiếp theo của con trỏ. Đây còn gọi là thuật toán lặp đảo ngược danh sách liên kết trong Java. Đối với thuật toán đệ quy, bạn cũng có thể xem sách Giới thiệu về thuật toán của Thomas H. Cormen.


______0
Bạn có thể thấy danh sách liên kết đã đảo ngược, trước đó 1 là phần tử đầu tiên bây giờ nó là cuối cùng và 3 là phần tử đầu tiên của danh sách liên kết hoặc .


Đó là tất cả về cách đảo ngược danh sách liên kết đơn trong Java mà không cần sử dụng đệ quy. Có, chúng tôi đã không sử dụng đệ quy trong giải pháp này, thay vào đó, chúng tôi đã sử dụng phép lặp. Bạn có thể thấy vòng lặp while bên trong phương thức reverse() .


Nhân tiện, nếu bạn nhận được câu hỏi này trong cuộc phỏng vấn thực tế, rất có thể bạn sẽ được yêu cầu đảo ngược danh sách được liên kết bằng cách sử dụng đệ quy ngay bây giờ. Vì vậy, hãy chờ một bài viết khác để xem giải pháp đó hoặc xem cuốn sách Phỏng vấn viết mã có giải pháp cho vấn đề này cùng với một số giải pháp khác.


Các câu hỏi phỏng vấn thuật toán và cấu trúc dữ liệu liên quan từ Blog Javarevisited

  • Làm cách nào để tìm phần tử ở giữa của danh sách được liên kết chỉ bằng một lượt?
  • 10 khóa học miễn phí để học Cấu trúc dữ liệu và thuật toán (khóa học)
  • Làm cách nào để tìm phần tử thứ 3 từ cuối danh sách được liên kết trong Java?
  • 7 Sách miễn phí để học Cấu trúc dữ liệu và thuật toán (sách)
  • Top 15 câu hỏi phỏng vấn về cấu trúc dữ liệu và thuật toán (xem tại đây)
  • 20 câu hỏi phỏng vấn mã hóa chuỗi hàng đầu (xem tại đây)
  • Khi nào nên sử dụng ArrayList so với LinkedList trong Java?
  • Hơn 20 câu hỏi phỏng vấn danh sách liên kết dành cho lập trình viên (câu hỏi)
  • Làm cách nào để tìm xem danh sách liên kết đơn có chứa vòng lặp không?
  • 7 khóa học tốt nhất để học Cấu trúc dữ liệu cho người mới bắt đầu (các khóa học tốt nhất)
  • Làm cách nào để tìm phần tử đầu tiên và cuối cùng của danh sách được liên kết trong Java?
  • Làm cách nào để chuyển đổi một danh sách được liên kết thành một mảng trong Java?
  • Làm cách nào để tìm kiếm các phần tử bên trong danh sách được liên kết trong Java?
  • Sự khác biệt giữa LinkedList và ArrayList trong Java là gì?
  • Top 30 câu hỏi phỏng vấn viết mã mảng có câu trả lời (xem tại đây)
  • 30 câu hỏi phỏng vấn mã hóa danh sách liên kết hàng đầu (xem tại đây)
  • 50 chương trình Java hàng đầu từ các cuộc phỏng vấn viết mã (xem tại đây)
  • 5 khóa học về thuật toán và cấu trúc dữ liệu miễn phí dành cho lập trình viên (khóa học)
  • 10 cuốn sách về thuật toán mà mọi lập trình viên nên đọc (sách)
  • Hơn 50 vấn đề về cấu trúc dữ liệu và thuật toán từ các cuộc phỏng vấn (câu hỏi)
  • 10 khóa học về thuật toán và cấu trúc dữ liệu miễn phí dành cho lập trình viên (khóa học)
  • Hơn 100 vấn đề về mã hóa cấu trúc dữ liệu từ các cuộc phỏng vấn (câu hỏi)

Thanks for reading this article so far. If you like this article then please share it with your friends and colleagues. If you have any questions or doubt then please let us know and I'll try to find an answer for you. As always suggestions, comments, innovative and better answers are most welcome.


P. S. - If you are looking for some Free Algorithms courses to improve your understanding of Data Structure and Algorithms, then you should also check these free data structure and algorithms courses on Udemy.

Làm cách nào để in danh sách liên kết trong C?

Để in dữ liệu của từng nút, chúng ta phải duyệt danh sách liên kết cho đến hết. .
Tạo một nút tạm thời (tạm thời) và gán địa chỉ của nút đầu
In dữ liệu có trong nút tạm thời
Sau khi in dữ liệu, di chuyển con trỏ tạm thời đến nút tiếp theo
Làm quá trình trên cho đến khi chúng ta kết thúc

Làm cách nào để in danh sách được liên kết theo thứ tự ngược lại trong C?

Làm cách nào để đảo ngược Danh sách được liên kết? .
Bước 1 – Lấy một con trỏ ptr
Bước 2 – Kiểm tra Linked List có node hay không
Bước 3 – Nếu danh sách liên kết trống, trả về 0
Bước 4 – Nếu danh sách được liên kết có các nút, hãy di chuyển con trỏ về phía trước cho đến khi nó đạt NULL
Bước 5 – Quay lại và in dữ liệu của các nút

Làm cách nào để duyệt dữ liệu trong danh sách được liên kết theo hướng tiến và lùi?

Có thể sử dụng ListIterator để duyệt qua các phần tử theo hướng thuận cũng như hướng ngược lại trong Danh sách được liên kết . Phương thức hasPrevious() trong ListIterator trả về true nếu có nhiều phần tử hơn trong LinkedList khi di chuyển theo hướng ngược lại và trả về false nếu không.

Làm cách nào để tìm kiếm một phần tử trong danh sách liên kết trong C?

Triển khai Chương trình C để tìm kiếm một phần tử trong danh sách liên kết. - .
Khởi tạo đầu = Null
Thêm một vài mục vào Danh sách liên kết
Lấy đầu vào từ người dùng cho mục anh ta muốn tìm kiếm
Duyệt tuyến tính Danh sách được liên kết từ đầu đến cuối cho đến khi bạn chạm vào nút null