24. Swap Nodes in Pairs

Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->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.

Subscribe to see which companies asked this question

這道題不難,但是不能直接交換兩個結點裏面的值,設p,q是要交換的兩個結點,將p指向q->next,相當於刪除q,然後把q插入到p的前面即可。頭結點需要特殊處理一下。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
    if(head==NULL||head->next==NULL)
      return head;
	ListNode *p,*q,*prior;
	p=head;
	prior=head;
	while (p->next!=NULL)
	{  
		q=p->next;
		p->next=q->next;
		q->next=p;
		if(prior==head)
		{
			head=q;
		}
		else
		{
			prior->next=q;
		}
	    prior=p;
		if(p->next!=NULL)     //如果爲空,回到while判斷的時候會自己退出,
	  	     p=p->next;      //若這裏沒有這個判斷,直接p=p->next,當p->next爲空時,while判斷時再用p->next時會異常。
		 
  }
	return head;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章