原題鏈結
本題兩種思路,遞迴和非遞迴
我使用的是遞迴結構,執行的結果很慘,時間和記憶體都是5%。思路比較簡單
遞迴思路:
從前往後處理鍊錶,宣告指標 listnode *p,*q,p在前,q在後;
將p和q的位置互換;
p要先指向q->next,q後面的節點遞迴處理;
遞迴推出條件為鍊錶中少於兩個節點;
給出**:
/**
* definition for singly-linked list.
* struct listnode
* listnode(int x) : val(x), next(nullptr) {}
* listnode(int x, listnode *next) : val(x), next(next) {}
* };
*/class
solution
};
非遞迴的做法是增加乙個頭節點,迭代交換
遞迴結構增加了時間和空間的開銷。儘量減少遞迴的使用。
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...