问题描述:
翻转一个链表
样例:
给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
解题思路:
用三个指针来保留位置,将中间的next指向前一个节点,然后三个节点按原来的顺序依次后移一位,完成循环就可以了。
代码:
/**
* Definition of ListNode
*
* class ListNode {
* public:
* int val;
* ListNode *next;
*
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
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
if (head== NULL || head->next== NULL)return head;
ListNode *p;
ListNode *q;
p= NULL;
while (head!= NULL) {
q= head->next;
head->next= p;
p= head;
head= q;
}
return p;
}
};
感想:
还有一个麻烦一点的思路,就是新建一个链表,用头插法将原来的节点拆入到新链表中去。