##题目:翻转一个链表
##样例:
给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
心累…这个题以前做过,但是那个时候给定链表了,这次就考虑的比较少。
先上代码吧…
/**
* Definition of ListNode
*
* 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){
return NULL;
}
if(head->next == NULL){
return head;
}
ListNode *p,*q,*set;
p = head->next;
head->next = NULL;
q = p->next;
set = head;
p->next = set;
while(q !=NULL){
set = p;
p = q;
q = p->next;
p->next = set;
}
return p;
}
};
总体来说思路比较混乱,刚开始没有考虑到链表过短的情况,算法应该可以再优化,
唉,感觉自己老了。
因为C的链表打的比较多,这次用了C++。
打的不好。