### 題目
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例:給定 1->2->3->4, 你應該返回 2->1->4->3.
### 思路
還是一樣的說法,鍊錶的問題只要思路清晰,並且保證沒有訪問到錯誤的值,比如null,或者對null求next,一般沒有多大的問題,下面這個問題因為是每兩個節點交換,所以最後是有乙個額外的節點,用來輔助交換,儲存節點資訊,下面就具體舉例:
要將鍊錶1->2->3->4->5兩兩進行交換,首先申請乙個輔助節點ahead,將其的後繼節點設為1,將輔助節點後面節點稱為p1節點,將p1後面的那個節點稱為nex,這樣原鍊錶變成了res->1->2->3->4->5,1其中p1指向1,nex指向2,其後將p1和nex進行交換。
交換的步驟要注意順序,否則會丟失掉節點資訊,首先將ahead的後繼節點換成nex,然後將p1的後繼節點換成nex的後繼節點,最後將nex的後繼節點換成p1,這樣原來的ahead->p1->nex->(nex->next)就變成了ahead->nex->p1->(nex->next),交換結束然後再調整ahead、p1、nex指向的節點,這裡要注意,如果說後面剩下的節點個數只有1個,那麼就不用繼續交換了,如果說還有大於1個節點,就繼續進行交換。將ahead指向交換之後的後乙個節點,也就是ahead->nex->p1->(nex->next)中的p1,然後將p1指向ahead->next,nex指向ahead->next->next,這樣又進行新一輪的交換,直到最後交換結束。
### code
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
listnode* p1=head;
listnode* nex=head->next;
while(1)
else
break;
}return res->next;
}};
LeetCode 24兩兩交換鍊錶的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 給定 1 2 3 4,你應該返回 2 1 4 3.class solution listnode next head.next head.next next.next 指向下...
leetcode24 兩兩交換鍊錶中的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。示例 給定 1 2 3 4,你應該返回 2 1 4 3.說明 你的演算法只能使用常數的額外空間。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。注意while裡tmp1和tmp2已經交換了,所以node tmp1 definit...
leetcode 24 兩兩交換鍊錶中的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。示例 給定 1 2 3 4,你應該返回 2 1 4 3.複製 說明 listnode definition for singly linked list.type listnode struct func head listnode list...