206. 反转链表
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* current = head;
while(current != nullptr){
ListNode* tempNext = current->next;
current->next = prev;
prev = current;
current = tempNext;
}
return prev;
}
};
92. 反转链表 II
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
int count = 1;
ListNode current = head;
ListNode previous = null;
ListNode tempNext = null;
ListNode leftBreak = null;
ListNode reverseTail = null;
while(count <= right){
tempNext = current.next;
if(left == count){
leftBreak = previous;
reverseTail = current;
} else if(left < count){
current.next = previous;
}
previous = current;
current = tempNext;
count++;
}
reverseTail.next = current;
if(leftBreak != null){
leftBreak.next = previous;
} else {
return previous;
}
return head;
}
}
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
int count = 0;
ListNode current = head;
ListNode previous = null;
ListNode newCurrent = current;
ListNode leftBreak = null,reverseTail = head, reverseHead = null;
while(true){
count ++;
if(count == k){
reverseHead = current;
current = reverseTail;
previous = null;
while (previous != reverseHead){
newCurrent = current.next;
current.next = previous;
previous = current;
current = newCurrent;
}
if(leftBreak == null){
head = reverseHead;
}else{
leftBreak.next = reverseHead;
}
leftBreak = reverseTail;
reverseTail.next = current;
reverseTail = current;
count = 0;
}else{
current = current.next;
}
if(current == null){
break;
}
}
return head;
}
}