题目链接:
题目描述:
Reverse a singly linked List
题目解释:
翻转一个单链表。所谓的单链表就是一个节点
只有一个后继的数据结构。
解题方案:
我们使用是三个临时变量来存储当前节点、当前
节点的前一个节点和当前节点的后继。
struct ListNode *pre = NULL;
struct ListNode *cur = head;
struct ListNode *under = head->next;
然后一步一步的向后迭代,在迭代过程中,将当
前节点的next域修改为指向当前节点
之前节点。
总体思路是这样的,但是这里有几个边界需要注
意:
1:我们将under作为迭代的条件,当next变成null
后迭代结束,那么最后一个节点的next域我们
就没有修改。
2:如果head为null,就不需声明三个节点了(under
节点声明会出错)。
下面是AC 3ms的源代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head)
{
if(head == NULL) return NULL;
struct ListNode *pre = NULL;
struct ListNode *cur = head;
struct ListNode *under= head->next;
while(next != NULL)
{
cur->next = pre;
pre = cur;
cur = under;
under = under->next;
//cur->next = pre;
if(!under) cur->next = pre;
}
return cur;
}