#include <iostream> using namespace std; typedef struct Node { int value; Node *next; }Node; Node* CreateSingleLinkedList(int array[], int length) { Node *p = new Node; Node *head = NULL; Node *t = p; for (int i=0; i<length; i++) { Node *t = new Node; t->value = array[i]; p->next = t; p = t; } p->next = NULL; head = t->next; delete t; return head; } void PrintSingleLinkedList(Node *head) { Node *p = head; while (NULL != p) { cout << p->value << endl; p = p->next; } } Node* DeleteSingleLinkedList(Node *head, int value) { if (head == NULL) return head; Node *p = head; Node *q = p; if (p->value == value) { head = p->next; delete p; p = NULL; } else { while (p!=NULL&&p->value!=value) { q=p; p=p->next; } if (p==NULL) {} else { q->next = p->next; delete p; p=NULL; } } return head; } Node* InsertSingleLinkedList(Node *head, int value) { Node *p = head; Node *q = p; Node * t = new Node; t->value = value; if (p == NULL) { //Node * t = new Node; t->next = NULL; //t->value = value; head = t; return head; } if (value < p->value) { //Node * t = new Node; t->next = p; //t->value = value; head = t; } else { while (p!=NULL&&value<p->value) { q=p; p=p->next; } if (p==NULL) { //Node * t = new Node; t->next = NULL; //t->value = value; q->next = t; } else { //Node * t = new Node; q->next = t; t->next = p; //t->value = value; } } return head; } Node* ReverseSingleLinkedList(Node *head) { if (head==NULL || head->next==NULL) { return head; } Node *p1,*p2,*p3; p1=head; p2=p1->next; while (p2) { p3=p2->next; p2->next=p1; p1=p2; p2=p3; } head->next=NULL; head=p1; return head; } Node* MergeTwoSingleLinkedList1(Node *head1, Node *head2) { if (head1==NULL) return head2; if (head2==NULL) return head1; Node * head = new Node(); Node * p = head1; Node * q = head2; Node * current = head; while(p != NULL && q != NULL) { if (p->value>=q->value) { current->next=q; current = q; q=q->next; } else { current->next=p; current = p; p=p->next; } } if (p!=NULL) { current->next = p; } if (q!=NULL) { current->next = q; } current = head; head=head->next; delete current; current=NULL; return head; } Node* MergeTwoSingleLinkedList2(Node *head1, Node *head2) { if (head1==NULL) return head2; if (head2==NULL) return head1; Node *head = NULL; if (head1->value<head2->value) { head=head1; head->next = MergeTwoSingleLinkedList2(head1->next, head2); } else { head=head2; head->next = MergeTwoSingleLinkedList2(head1, head2->next); } return head; } int main() { /*Create two SingleLinkedList*/ int array1[5] = {1, 3, 5, 7, 9}; int array2[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; //Create Node * head1 = CreateSingleLinkedList(array1, 5); Node * head2 = CreateSingleLinkedList(array2, 10); //PrintSingleLinkedList(head1); //PrintSingleLinkedList(head2); cout<<endl; //Delete first, last, middle till NULL¡Ê¡ÂÔ //Insert from NULL, insert head, tail, middle, same¡Ê¡ÂÔ //Reverse twice // head1 = ReverseSingleLinkedList(head1); // // PrintSingleLinkedList(head1); // // head1 = ReverseSingleLinkedList(head1); // // PrintSingleLinkedList(head1); // // cout<<endl; //Node * head = MergeTwoSingleLinkedList2(head1, head2); Node * head = MergeTwoSingleLinkedList2(head1, head2); PrintSingleLinkedList(head); return 0; }
![](https://img2024.cnblogs.com/blog/35695/202407/35695-20240713070336838-1837943664.jpg)