Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Trần Việt Anh - 6:00PM - 15/4/2019
- #include<iostream>
- using namespace std;
- struct Node
- {
- int value;
- Node* next;
- };
- Node* initLinkedList(int n, int arr[]) {
- Node* p[n];
- for (int i = 0; i < n; i++)
- p[i] = new Node();
- for (int i = 0; i < n - 1; i++) {
- p[i] -> value = arr[i];
- p[i] -> next = p[i + 1];
- }
- p[n - 1] -> value = arr[n - 1];
- p[n - 1] -> next = NULL;
- return p[0];
- }
- void print(Node* head)
- {
- Node *n;
- n = head;
- while (n != NULL) {
- cout << n -> value << " ";
- n = n -> next;
- }
- cout << endl;
- }
- Node* insertHead(Node* head, int value)
- {
- Node *result;
- result -> value = value;
- result -> next = head;
- return result;
- }
- Node* insertTail(Node* head, int value)
- {
- Node *n;
- n = head;
- if (n == NULL) {
- head = new Node();
- head -> value = value;
- head -> next = NULL;
- }
- else {
- while (n -> next != NULL) n = n -> next;
- Node *insertNode;
- insertNode = new Node();
- insertNode -> value = value;
- insertNode -> next = NULL;
- n -> next = insertNode;
- }
- return head;
- }
- Node* deleteNode(Node* head, int pos)
- {
- int currentPos = 0;
- if (pos == 0)
- return head -> next;
- Node *n = head;
- while (currentPos < pos - 1) {
- n = n -> next;
- currentPos++;
- }
- n -> next = n -> next -> next;
- return head;
- }
- int getValue(Node* head, int pos)
- {
- int currentPos = 0;
- Node *n = head;
- while (currentPos < pos) {
- n = n -> next;
- currentPos++;
- }
- return n -> value; // Change this line
- }
- Node* deleteDuplicates(Node* head) {
- Node* n;
- n = head;
- Node* temp;
- temp = head;
- while (n != NULL) {
- bool foundDuplicate = false;
- while (n -> next != NULL && n -> next -> value == temp -> value) {
- foundDuplicate = true;
- n = n -> next;
- }
- if (foundDuplicate) {
- cout << "found" << endl;
- temp -> next = n -> next;
- temp = n -> next;
- }
- else return head;
- n = n -> next;
- }
- return head;
- }
- Node* insert(Node* head, int value) {
- Node* n = head;
- if (n -> value >= value) {
- Node* insertNode = new Node();
- insertNode -> value = value;
- insertNode -> next = n;
- return insertNode;
- }
- while (n -> next != NULL && n -> next -> value <= value) n = n -> next;
- Node* insertNode = new Node();
- insertNode -> value = value;
- insertNode -> next = n -> next;
- n -> next = insertNode;
- return head;
- }
- int getNodeValue(Node* head, int index) {
- int pos = 0;
- Node* n = head;
- while (pos < index) {
- n = n -> next;
- pos++;
- }
- return n -> value;
- }
- Node* convert(Node* head)
- {
- if (head == NULL) return head;
- Node* tail = head; int length = 1;
- Node* start = head;
- Node* temp = head;
- while (tail -> next != NULL) {
- tail = tail -> next;
- length++;
- }
- for (int i = length / 2 - 1; i > 0; i--) {
- for (int j = 0; j < i; j++) {
- temp = temp -> next;
- tail -> next = new Node(); tail = tail -> next;
- tail -> value = temp -> value;
- }
- temp = temp -> next; start -> next = temp;
- start = temp;
- for (int j = 0; j < i; j++) {
- temp = temp -> next;
- tail -> next = new Node(); tail = tail -> next;
- tail -> value = temp -> value;
- }
- temp = temp -> next; start -> next = temp;
- start = temp;
- }
- return head;
- }
- int main() {
- Node* head;
- int arr[6] = {1, 3, 5, 2, 4, 6};
- head = initLinkedList(6, arr);
- cout << "Initialize successful" << endl;
- print(head);
- head = insertHead(head, 5);
- print(head);
- head = insertTail(head, 2);
- print(head);
- head = deleteNode(head, 0);
- print(head);
- cout << getValue(head, 2) << endl;
- head = deleteDuplicates(head);
- print(head);
- head = insert(head, 1);
- print(head);
- head = convert(head);
- print(head);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement