Hướng dẫn how do you concatenate two linked lists in python? - làm thế nào để bạn nối hai danh sách được liên kết trong python?

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.

Làm thế nào để bạn kết hợp hai danh sách được liên kết?

Chúng ta chỉ cần làm theo một số bước rất đơn giản và các bước để tham gia hai danh sách [giả sử 'A' và 'B'] như sau: Traverse qua danh sách được liên kết 'A' cho đến khi phần tử bên cạnh nút không phải là null. Nếu phần tử bên cạnh phần tử hiện tại là null [a-> next == null] thì hãy thay đổi phần tử bên cạnh thành 'B' [a-> next = b].

Làm thế nào để bạn liên kết hai danh sách được liên kết trong Python?

[1] Tạo một con trỏ đầu mới đến một danh sách được liên kết trống.[2] Kiểm tra giá trị đầu tiên của cả hai danh sách được liên kết.[3] Bất kỳ nút nào từ L1 hoặc L2 nhỏ hơn, hãy nối nó vào danh sách mới và di chuyển con trỏ sang nút tiếp theo.[4] Tiếp tục quá trình này cho đến khi bạn đạt đến cuối danh sách được liên kết.

Điều nào sau đây là hiệu quả nhất để kết hợp 2 danh sách được liên kết?

Giải thích: Chúng tôi có thể dễ dàng kết hợp hai danh sách trong thời gian O [1] bằng danh sách liên kết đơn hoặc đôi, miễn là chúng tôi có một con trỏ tới nút cuối cùng ít nhất một trong các danh sách.Nhưng trong trường hợp các danh sách liên kết đôi tròn, chúng tôi sẽ phá vỡ liên kết trong cả hai danh sách và kết nối chúng với nhau.singly or doubly linked list, provided that we have a pointer to the last node at least one of the lists. But in case of circular doubly linked lists, we will break the link in both the lists and hook them together.

Chúng ta có thể thêm hai danh sách được liên kết không?

Sau đây là các bước.1] Tính kích thước của hai danh sách được liên kết đã cho.2] Nếu kích thước giống nhau, thì hãy tính tổng bằng cách sử dụng đệ quy.Giữ tất cả các nút trong ngăn xếp cuộc gọi đệ quy cho đến khi nút ngoài cùng bên phải, tính tổng các nút ngoài cùng bên phải và chuyển về phía trước ở phía bên trái.

Bài Viết Liên Quan

Chủ Đề