例子:
给出3->2->1->null
翻转为1->2->3->null
挑战原地翻转。
代码如下:(不带头结点,lintcode的题也是不带头结点
/**
* Definition of singly-linked-list:
*
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: n
* @return: The new head of reversed linked list.
*/
ListNode * reverse(ListNode * head) {
// write your code here
if (head == NULL||head->next==NULL)//空链表和只有一个节点的不改动
return head;
ListNode * p = head, *t = p, *q = p->next;
p->next = NULL;
p = q;
q = q->next;
while (p->next) {
p->next = t;
t = p;
p = q;
q = q->next;
}
p->next = t;
head = p;
return head;
}
// return head;
};
(写了一个带头结点的
void reverse_(Linklist &head) {
// write your code here
if (head->next->next == NULL || head->next == NULL)
return ;
Linklist p = head->next, t = p, q = p->next;
p->next = NULL;
p = q;
q = q->next;
while (p->next) {
p->next = t;
t = p;
p = q;
q = q->next;
}
p->next = t;
head->next = p;
}