將單鏈表翻轉
阿新 • • 發佈:2018-11-12
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("已實現單鏈表的逆序!!");
} 頭插法實現逆序 */