CTDL Và Giải Thuật - Xóa Phần Tử K Trong Danh Sách
Có thể bạn quan tâm
Nhập vào một số nguyên dương n, tiếp theo là n số nguyên của một dãy số, hãy cài đặt nó vào một danh sách liên kết đơn. Tiếp theo cho một số nguyên k, (0 ≤ k < n), hãy xóa phần tử ở chỉ số k và in ra màn hình danh sách đó, sau một phần tử có một khoảng trắng.
Ví dụ:
- Test mẫu 1:
Với l = [1, 2, 3, 4], k = 1 thì kết quả mong muốn là: "1 3 4 ".Input Output 4 1 2 3 4 1
1 3 4 - Test mẫu 2:
Với l = [1, 2, 3], k = 0 thì kết quả mong muốn là: "2 3".Input Output 3 1 2 3 0
2 3
Lý thuyết.
Việc xóa phần tử trong dach sách liên kết cũng rất đơn giản với độ phức tạp là O(n).
Xóa phần tử đầu tiên của danh sách liên kết đơn.
Để xóa phần tử đầu tiên trong danh sách liên kết l, ta chỉ cần gán l = l->next, và nhớ giải phóng bộ nhớ của node đã xóa.

Code C++ mẫu:
node *deleteHead(node *l){ node *p = l; p = p->next; delete(l); return p; }Xóa phần tử cuối cùng trong danh sách liên kết đơn.
Để xóa phần tử cuối cùng trong listLinker ta cần tìm node của phần tử trước phần tử cuối và gán next của nó bằng NULL, cũng phải xóa bỏ vùng nhớ đã cấp phát cho node cuối cùng.

Code C++ mẫu:
node *deleteTail(node *l){ node *p = l; while (p->next->next != NULL){ p = p->next; } delete(p->next); p->next = NULL; return l; }Xóa phần tử ở vị trí khác đầu và cuối trong danh sách liên kết đơn:
Để xóa phần tử ở vị trí k ta cần phải tìm node p của phần tử k-1 và gán p->next = p->next->next như hình vẽ.

Code C++ mẫu:
node *deleteAt(node *l, int k){ node *p = l; for (int i = 0; i < k-1; i++){ p = p->next; } node *temp = p->next; p->next = p->next->next; delete(temp); return l; }Hướng dẫn bài tập.
Code mẫu:
Ngôn ngữ C++:
#include<iostream> using namespace std; struct node{ int data; node *next; }; node *createNode(int x){ node *temp = new node; temp->next = NULL; temp->data = x; return temp; } void printList(node *l){ node *p = l; while (p != NULL){ cout << p->data << " "; p = p->next; } } node *addElement(node*p, int x){ node *temp = createNode(x); p->next = temp; return temp; } node *deleteHead(node *l){ node *p = l; p = p->next; delete(l); return p; } node *deleteTail(node *l){ node *p = l; while (p->next->next != NULL){ p = p->next; } delete(p->next); p->next = NULL; return l; } node *deleteAt(node *l, int k){ node *p = l; for (int i = 0; i < k-1; i++){ p = p->next; } node *temp = p->next; p->next = p->next->next; delete(temp); return l; } int main(){ int n, x, k; cin >> n; cin >> x; node *l = createNode(x); node *p = l; for (int i = 1; i < n; i++){ cin >> x; p = addElement(p, x); } cin >> k; if (k == 0){ l = deleteHead(l); } else if (k == n-1){ l = deleteTail(l); } else{ l = deleteAt(l, k); } printList(l); return 0; }Từ khóa » Xóa Phần Tử Cuối Của Danh Sách Liên Kết đơn
-
[Basic-DSAA] Danh Sách Liên Kết đơn - Xóa Phần Tử. - CodeLearn
-
Xóa Phần Tử Trong Danh Sách Liên Kết đơn C/C++ | Lập Trình Từ Đầu
-
Xóa Phàn Tử Cuối Trong Danh Sách Liên Kết đơn - Dạy Nhau Học
-
Xóa Node Trong Danh Sách Liên Kết đơn - Freetuts
-
Xóa Phần Tử Trong Danh Sách Liên Kết đơn - Hỏi Đáp
-
[Danh Sách Liên Kết] Bài 6. Xóa Node đầu Và Cuối Trong ... - YouTube
-
Xóa Phần Tử Cuối Của Danh Sách Liên Kết đơn - Diễn Đàn Tin Học
-
Xoá Phần Tử Trong Danh Sách Liên Kết - Deft Blog
-
Danh Sách Liên Kết - Xóa Phần Tử Cuối Cùng Của Danh Sách
-
Xóa Phần Tử Cuối Danh Sách Liên Kết đơn Java
-
Để Xóa 1 Phần Tử (không Phải Phần Tử đầu) Trong Danh Sách Liên Kết ...
-
Danh Sách Liên Kết đơn Trong C++ | TopDev
-
Toàn Tập Về Danh Sách Liên Kết | Thư Viện Hướng Dẫn
-
Xóa Một Phần Tử Từ Danh Sách Liên Kết đơn Trong C