problem:

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.

在单链表中。每两个结点交换一下位置。单个的不交换

thinking:

(1)这道题在不新建结点的情况下。指向关系复杂。慢慢分析

(2)head是头指针,指向第一个有效结点!!!

code:

/**

* 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) {

ListNode *index = head;

ListNode *pre = NULL;

ListNode *tmp = NULL;

ListNode *modify = head;;

int i=0;

if(head==NULL||head->next==NULL)

return head;

while((index!=NULL)&&(index->next!=NULL))

{

i++;

pre=index;

if(i==1)

{

head=pre->next;

index = index->next;

tmp = index->next;

pre->next = tmp;

index->next = pre;

index=tmp;

modify=pre;

}

else

{

index = index->next;

tmp = index->next;

modify->next=pre->next;

pre->next = tmp;

index->next = pre;

index=tmp;

modify=pre;

}

}

return head;

}

};

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。