鏈表的一些操作

#include <stdio.h>
#include<iostream>
#include <algorithm>   
using namespace std;

struct ListNode{
    int val;
    ListNode *next;
    ListNode(int x) :val(x), next(NULL){};
};

ListNode* CreateList(){
    cout << "Please input the length of linked list" << endl;
    int length;
    cin >> length;

    ListNode* head, *p, *s;
    head = new ListNode(0);
    p = head;
    int x;
    int i = 1;
    while (i<=length){
        cout << "Please input the " << i << "th node value" << endl;
        cin >> x;
        s = new ListNode(x);
        p->next = s;
        p = s;
        i++;

    }
    return head->next;
   
}
int CalLinkedlistLength(ListNode *head){
    int l = 0;
    ListNode* p;
    p = head;
    while (p){
        l++;
        p = p->next;
    }
    return l;
}
ListNode* RemoveNode(ListNode *head, int target){
    ListNode* temp = head;
    ListNode* t = new ListNode(0);
    t->next = head;
    head = t;
    while (temp){
        if (temp->val == target){
            t->next = temp->next;
            temp = temp->next;
        }
        else{
            t = temp;
            temp = temp->next;
        }
            
    }
    return head->next;
}
ListNode* InsertNode(ListNode *head, int num){
    cout << "please input the insert place: 0 to " << CalLinkedlistLength(head) << endl;
    int place;
    cin >> place;
    if (place <= 0) place = 1;
    if (place > CalLinkedlistLength(head)) place = CalLinkedlistLength(head) + 1;
    ListNode* temp = head;
    ListNode* t = new ListNode(0);
    t->next = head;
    head = t;
    ListNode* newNode = new ListNode(num);
    if (place == 1){
        t->val = num;
        return head;
    }
    else if (place == CalLinkedlistLength(head) + 1){
        while (temp){
            t = temp;
            temp = temp->next;

        }        
        t->next = newNode;
        return head->next;

    }
    else{
        int i = 1;
        while (i < place){
            t = temp;
            temp = temp->next;
            i++;
        }
        t->next = newNode;
        newNode->next = temp;
        return head->next;
    }
    

}
ListNode* ReverseLinkedlist(ListNode *head){
    ListNode *temp = NULL;
    ListNode *p = head->next;
    head->next = temp;
    while (p){
        ListNode* t = p->next;
        p->next = head;
        head = p;
        p = t;
    }
    return head;
}
int main(){
    ListNode *head = CreateList();
    int l = CalLinkedlistLength(head);
  //  head = RemoveNode(head, 1);
    
    head = InsertNode(head, 20);
    head = ReverseLinkedlist(head);
    ListNode *p = head;
    while (p){
        cout << p->val << "->";
        p = p->next;
    }
    cout << "NULL" << endl;


    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章