#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;
}
鏈表的一些操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.