c++-swap nodes in pairs
題目描述
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given1->2->3->4, you should return the list as2->1->4->3.
Your algorithm should use only constant space. You may?not?modify the values in the list, only nodes itself can be changed.
這道題是將鏈表中的相鄰的元素調換,而且不能改變其值,只能調換節點。
思路:
比如鏈表為1->2->3->4->5->6
將p設定為head,也就是1,q設定為2,r設定為3,他們的關系就是:
p=head;
q=head->next;
r=q->next;
然后將p->next指向r,q->next指向p,完成了p,q之間的調換,
p->next=r;
q->next=p;
接著移動p, q, r到下一個節點:
p=r;
q=r->next;
r=r->next->next;
再進行上述重復的調換,直到p或q為NULL,表示到最后了。
接下來貼出代碼:
這里用了一個輔助指針作為表頭,也就是res->next,這是鏈表中常用的小技巧,因為這樣可以避免處理head的邊界情況,一般來說要求的結果表頭會有變化的會經常用這個技巧,大家以后會經常遇到。
ListNode* res = new ListNode(0); res->next = head;然后新建一個tmp節點,讓其等于res,然后讓這個tmp節點隨著處理而變化,比如循環中第一個tmp->next=q, 也就是將q節點,放在頭節點,也就是res->next,緊接著tmp=p,也就是將tmp節點移動到p,而p是q的下一個,也就相當于交換了p和q的位置。
轉載于:https://www.cnblogs.com/sichenzhao/p/9320172.html
總結
以上是生活随笔為你收集整理的c++-swap nodes in pairs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神经网络和深度学习-第二周神经网络基础-
- 下一篇: 实用链接