class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: The new head of reversed linked list.
*/
ListNode *reverse(ListNode *head) {
// write your code here
ListNode *prev = NULL;
while (head != NULL) {
ListNode *temp = head->next; //保存下一个要处理的节点
head->next = prev;
prev = head; //这两步就是把当前head加入到prev链表前面
//先把1加到NULL前面,形成 1--->NULL
//再把2加到这个链表前面形成,2-->1-->NULL
head = temp; //head为下一个要处理的节点
}
return prev;
}
};
翻转链表中第m个节点到第n个节点的部分
class Solution {
public:
/**
* @param head: The head of linked list.
* @param m: The start position need to reverse.
* @param n: The end position need to reverse.
* @return: The new head of partial reversed linked list.
*/
ListNode *reverseBetween(ListNode *head, int m, int n) {
// write your code here
ListNode *dummy = new ListNode(0);
dummy->next = head;
ListNode *p = dummy;
ListNode *prev = head;
for(int i = 1;i < m;i++){ //指向要翻转的链表的前一个
p = p->next;
}
for(int i = 0;i < n;i++){ //指向要翻转的链表的后一个
prev = prev->next;
}
ListNode *start = p;
p = p->next;
for(int j = m;j <=n;j++){
ListNode *temp = p->next;
p->next = prev;
prev = p;
p = temp;
}
start->next = prev;
return dummy->next;
}
};