Tôi đang cố gắng kết hợp một danh sách được liên kết Python mà không sao chép dữ liệu có trong các nút của danh sách. Tôi có một chức năng sẽ kết hợp danh sách bằng cách sử dụng các bản sao của các nút được truyền vào, nhưng dường như tôi không thể có được chức năng không sử dụng các bản sao để hoạt động.
Các chức năng này là cho mục đích thử nghiệm và thời gian; Tôi biết rằng danh sách tích hợp của Python thật tuyệt vời!
Đây là lớp tôi đã làm việc và chức năng Concatenate.
class Cell:
def __init__[ self, data, next = None ]:
self.data = data
self.next = next
def print_list[self]:
node = self
while node != None:
print node.data
node = node.next
Hàm nối không có nghĩa là chức năng thành viên của lớp tế bào.
def list_concat[A, B]:
while A.next != None:
A = A.next
A.next = B
return A
Hàm này ghi đè lên phần tử đầu tiên của danh sách nếu tham số A có nhiều hơn một nút. Tôi hiểu tại sao điều đó đang xảy ra, nhưng tôi không chắc chắn làm thế nào để sửa nó.
Dưới đây là mã thử nghiệm mà tôi đã sử dụng cho chức năng này.
e = Cell[5]
test = Cell[3, Cell[4]]
test2 = list_concat[test2, e]
test2.print_list[]
Bất kỳ cái nhìn sâu sắc hoặc trợ giúp sẽ được đánh giá rất cao.
*Đã chỉnh sửa để sửa định dạng mã
Quay lại: Cấu trúc dữ liệu và hướng dẫn thuật toán
Cách kết hợp hai danh sách được liên kết bằng ngôn ngữ C với các ví dụ:
Trong bài viết này, tôi sẽ thảo luận về cách kết hợp hai danh sách được liên kết bằng ngôn ngữ C với các ví dụ. Vui lòng đọc bài viết trước của chúng tôi, nơi chúng tôi đã thảo luận về quy trình đệ quy để đảo ngược danh sách được liên kết bằng ngôn ngữ C với các ví dụ.How to Concatenate two Linked Lists in C Language with Examples. Please read our previous article, where we discussed the Recursive Procedure for Reversing a Linked List in C Language with Examples.
Làm thế nào để kết hợp hai danh sách được liên kết?Ở đây, chúng tôi sẽ xem xét sự kết hợp của hai danh sách được liên kết.
Ở đây chúng tôi có hai danh sách được liên kết. Concatenation có nghĩa là tham gia hai danh sách được liên kết hoặc thêm một danh sách được liên kết vào danh sách được liên kết khác. Ở đây chúng tôi muốn nối danh sách liên kết thứ hai vào danh sách được liên kết đầu tiên. Nó có thể được thực hiện theo một cách khác, tức là chúng ta có thể nối danh sách được liên kết đầu tiên vào danh sách được liên kết thứ hai. Vì vậy, nó giống như làm thứ nhất cộng thứ hai và chúng tôi muốn tạo một danh sách liên kết kết hợp. Chúng ta hãy xem xét thủ tục.
Thủ tục cho hai danh sách liên kết:Chúng ta phải đạt đến phần cuối của danh sách được liên kết đầu tiên và thay vì NULL, nó nên trỏ đến nút đầu tiên của danh sách được liên kết thứ hai, do đó, nó trở thành một danh sách liên kết hoàn chỉnh.
Ở đây, chúng tôi sẽ lấy một con trỏ ‘P, và đi qua toàn bộ danh sách được liên kết cho đến khi con trỏ P đạt đến nút cuối cùng.
Bây giờ làm thế nào để chúng ta biết rằng nút là nút cuối cùng? Bởi vì nút đó tiếp theo là null. Vì vậy, chúng tôi sẽ dừng ở nút có con trỏ tiếp theo là null. Và một khi chúng tôi đạt đến nút đó, chúng tôi sẽ tham gia hai danh sách được liên kết này. Bây giờ chúng ta hãy viết mã giả cho việc kết hợp hai danh sách được liên kết.
Mã giả cho Concatenate hai danh sách được liên kết:p = first; while [p-> next! = null] {& nbsp; & nbsp; & nbsp; & nbsp; p = p-> tiếp theo;} p-> next = second; second = null;
while[p->next != NULL]{
p = p->next;
}
p->next = second;
second = NULL;
Bây giờ chúng ta hãy viết chương trình hoàn chỉnh.
Chương trình cho Concatenate hai danh sách được liên kết bằng ngôn ngữ C:#include #include struct Node { int data; struct Node *next; } *temp = NULL, *first = NULL, *second = NULL; struct Node* Create[int A[], int n] { int i; struct Node *t, *last; temp = [struct Node *] malloc[sizeof[struct Node]]; temp->data = A[0]; temp->next = NULL; last = temp; for [i = 1; i < n; i++] { t = [struct Node *] malloc[sizeof[struct Node]]; t->data = A[i]; t->next = NULL; last->next = t; last = t; } return temp; } void Display[struct Node *p] { while [p != NULL] { printf ["%d ", p->data]; p = p->next; } } void Concat[struct Node *first, struct Node *second] { struct Node *p = first; while [p->next != NULL] { p = p->next; } p->next = second; second = NULL; } int main[] { int A[] = { 9, 7, 4, 3 }; int B[] = { 2, 5, 6, 8 }; first = Create[A, 4]; second = Create[B, 4]; printf ["1st Linked List: "]; Display [first]; printf ["\n2nd Linked List: "]; Display [second]; Concat [first, second]; printf ["\n\nConcantenated Linked List: \n"]; Display [first]; return 0; }Đầu ra:Output:
Độ phức tạp về thời gian: O [n]O[n]
Trong bài viết tiếp theo, tôi sẽ thảo luận về cách hợp nhất hai danh sách được liên kết bằng ngôn ngữ C với các ví dụ. Ở đây, trong bài viết này, tôi cố gắng giải thích cách kết hợp hai danh sách được liên kết bằng ngôn ngữ C với các ví dụ và tôi hy vọng bạn thích bài viết này.How to Merge two Linked Lists in C Language with Examples. Here, in this article, I try to explain How to Concatenate two Linked Lists in C Language with Examples and I hope you enjoy this article.