Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "function.h"
- size_t sz = 0;
- Node *newNode(unsigned short val) {
- Node *temp = (Node *)malloc(sizeof(Node));
- temp->val = val;
- temp->prev = temp->next = NULL;
- return temp;
- }
- void do_I(Node **head, size_t pos, unsigned short val) {
- ++sz;
- if (head == NULL || *head == NULL || sz - 1 == 0) {
- *head = newNode(val);
- (*head)->next = (*head)->prev = *head;
- return ;
- }
- if (pos == 0) {
- Node *temp = newNode(val);
- Node *last = (*head)->prev;
- temp->prev = last;
- last->next = temp;
- temp->next = *head;
- (*head)->prev = temp;
- *head = temp;
- return ;
- }
- if (pos > sz - 1)
- pos = sz - 1;
- Node *node = *head;
- for (size_t i = 1; i < pos; i++)
- node = node->next;
- Node *temp = newNode(val);
- Node *nxt = node->next;
- temp->prev = node;
- node->next = temp;
- temp->next = nxt;
- nxt->prev = temp;
- }
- void do_E(Node **head, size_t begin_pos, size_t end_pos) {
- if (head == NULL || *head == NULL)
- return ;
- if (begin_pos > sz)
- begin_pos = sz;
- if (end_pos > sz)
- end_pos = sz;
- if (begin_pos >= end_pos)
- return ;
- if (begin_pos == 0 && end_pos == sz) {
- sz = 0;
- *head = NULL;
- return ;
- }
- sz -= (end_pos - begin_pos);
- if (begin_pos == 0) {
- Node *last = (*head)->prev;
- for (size_t i = 0; i < end_pos; i++)
- *head = (*head)->next;
- (*head)->prev = last;
- last->next = *head;
- return ;
- }
- Node *node = *head;
- for (size_t i = 1; i < begin_pos; i++)
- node = node->next;
- Node *node2 = *head;
- for (size_t i = 0; i < end_pos; i++)
- node2 = node2->next;
- node->next = node2;
- node2->prev = node;
- }
- void do_R(Node **head, unsigned short val) {
- if (head == NULL || *head == NULL)
- return ;
- Node *node = *head;
- size_t s = sz;
- for (size_t i = 0; i < s; i++) {
- if (node->val == val) {
- --sz;
- if (sz == 0) {
- *head = NULL;
- return ;
- }
- if (node == *head) {
- *head = node->next;
- Node *last = node->prev;
- (*head)->prev = last;
- last->next = *head;
- } else {
- Node *pre = node->prev;
- Node *nxt = node->next;
- pre->next = nxt;
- nxt->prev = pre;
- }
- }
- node = node->next;
- }
- }
- void do_P(Node *head, size_t pos) {
- if (head == NULL)
- return ;
- if (pos >= sz)
- pos = sz - 1;
- for (size_t i = 0; i < pos; i++)
- head = head->next;
- printf("%hu ", head->val);
- }
- void do_S(Node *head) {
- if (head == NULL)
- return ;
- for (size_t i = 0; i < sz; i++) {
- printf("%hu ", head->val);
- head = head->next;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement