创建链表
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct NODE{
int val;
struct NODE *next;
}Node,*Linklist;
Linklist createList(int n){
Linklist head = (Node*) malloc(sizeof(Node));
head->next=NULL;
Linklist p;
for(int i=0;i<n;i++)
{
p = (Node*)malloc(sizeof(Node));
scanf("%d",&p->val);
p->next=head->next;
head->next=p;
}
return head;
}
反转链表(c++)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==nullptr)
return head;
ListNode* newhead = new ListNode(0);
ListNode* tmp=nullptr;
ListNode* cur=head;
ListNode* run;
while(cur){
run=cur->next;
if(run==nullptr)
newhead=cur;
cur->next=tmp;
tmp=cur;
cur=run;
}
return newhead;
}
};
反转链表m到n的位置上节点
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(m==n || head==nullptr)
return head;
ListNode* newhead = new ListNode(0);
newhead->next=head;
ListNode* old=newhead;
for(int i=0;i<m-1;++i)
old=old->next;
ListNode* cur=old->next;
for(int j=0;j<n-m;++j){
ListNode* run = cur->next;
cur->next=run->next;
run->next=old->next;
old->next=run;
}
return newhead->next;
}