1. 程式人生 > >將單鏈表翻轉

將單鏈表翻轉

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};
沒有頭結點的單鏈表,利用三個指標,在原來的基礎上進行逆序。這種方法比較實用,效率也高。
ListNode *ReverseList(ListNode *head){
    ListNode *pre, *cur, *net;//前驅,中間,後繼節點。
    pre = head;
    cur = pre->next;
    while (cur){
        net = cur->next;
        cur->next = pre;
        pre = cur;
        cur = net;
    }
    //這裡翻轉完成之後起初的頭結點就是尾節點了。所以
    head->next = NULL;
    *head = p1;
    return head;
}

 

有頭節點的單鏈表,從第2個節點到第N個節點,依次逐節點插入到第1個節點(head節點)之後,頭節點依次往後挪

/*void reverse(struct X *head)
{
    struct X *p1,*p2;
    p1=head->next;
    head->next=NULL;
    while(p1)
    {
        p2=p1;
        p1=p1->next;
        p2->next=head->next;
        head->next=p2;
        }
    printf("已實現單鏈表的逆序!!");
    } 頭插法實現逆序 */