您的位置:首页 > 其它

【leetcode】Reverse Linked List I & II

2015-05-05 15:02 232 查看
Reverse a singly linked list.

click to show more hints.

Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?

class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==NULL||head->next==NULL) return head;

ListNode *p=head->next;
ListNode *newhead=reverseList(head->next);
head->next=NULL;
p->next=head;
return newhead;

}
};


II:

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(head==NULL||m<0||n<0) return head;
if(head->next==NULL||m==n) return head;

ListNode *p=head;
int i=1;

while(i<m)
{
p=p->next;
i++;
}

for(int j=m;j<n;j++)
{
ListNode *q=p;
for(int k=j;k<n;k++)
{
q=q->next;
}
swap(p->val,q->val);

n--;
p=p->next;
}

return head;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: