您的位置:首页 > 其它

[LeetCode-206] Reverse Linked List(链表反转)

2015-09-16 10:54 656 查看
Reverse a singly linked list.

链表反转详细分析

代码如下:

/*无头结点*/
struct ListNode* reverseList(struct ListNode* head) 
{
    if((head == NULL) || (head->next==NULL))  //链表为空,或只有一个结点(无需反转),直接返回
        return head;

    struct ListNode *pre = NULL;//前一个
    struct ListNode *cur = NULL;//当前
    struct ListNode *ne = NULL;//后一个

    pre = head;         //将前面几个节点的地址依次保存在新定义的结构体指针
    cur = head ->next;

    while(cur)
    {
        ne = cur->next;  //如果当前节点不为空,则将其指针域赋给ne指针
        cur->next = pre; //直接将两个指针的指向反转
        pre = cur;       //将当前节点赋给pre,将三个指针在链表中的位子都往后移一位
        cur = ne;     
    }
    head->next = NULL;//将原来的第一个节点的指针域赋为空,作为尾节点
    head = pre;      //将原来的尾节点变成新链表的第一个节点
    return head;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: