// 1.头插法classSolution{public:
ListNode*reverseList(ListNode* head){if(head ==nullptr)returnnullptr;
ListNode* dummyhead =newListNode(-1);
dummyhead -> next = head;
ListNode* cur = head;while(cur -> next !=nullptr){auto temp = cur->next->next;auto temp1 = dummyhead->next;
dummyhead->next = cur->next;
cur->next->next = temp1;
cur->next = temp;}return dummyhead->next;}};// 2.双指针classSolution{public:
ListNode*reverseList(ListNode* head){
ListNode* cur = head;
ListNode* pre =nullptr;
ListNode* temp =nullptr;while(cur){
temp = cur -> next;
cur->next = pre;
pre = cur;
cur = temp;}return pre;}};// 3.递归解法classSolution{public:
ListNode*reverseList(ListNode* head){if(head ==nullptr)returnnullptr;if(head -> next ==nullptr)return head;
ListNode* temp =reverseList(head->next);
head -> next ->next = head;
head -> next =nullptr;return temp;}};
3.两两交换链表中的节点
classSolution{public:
ListNode*swapPairs(ListNode* head){
ListNode* cur = head;
ListNode* temp =nullptr;
ListNode* dummyhead =newListNode(-1);
dummyhead -> next = head;
ListNode* pre = dummyhead;while(cur !=nullptr&& cur -> next !=nullptr){
pre -> next = cur -> next;
temp = cur -> next ->next;
cur -> next ->next = cur;
cur -> next = temp;
pre = cur;
cur = cur -> next;}return dummyhead->next;}};
4.删除链表的倒数第N个节点
classSolution{public:
ListNode*removeNthFromEnd(ListNode* head,int n){
ListNode* dummyhead =newListNode(-1);
dummyhead -> next = head;
ListNode* pre = dummyhead;
ListNode* cur = head;while(n--){if(cur ==nullptr)return head;
cur = cur -> next;}while(cur !=nullptr){
cur = cur->next;
pre = pre->next;}
pre -> next = pre ->next->next;return dummyhead->next;}};