Leetcode - 1721. Swapping Nodes in a Linked List
想法:
設置兩個 pointer 分別為 node1 和 node2
node1 為由前面往後數 n 個
node2 為由後面往前數 n 個
1. 先定位好兩個 pointer
先定位好 node1,再來定位好 node2
2. 進行交換
原本想說要把兩個 pointer 交換,但要考慮到太多問題一直寫不出來,後來發現其實直接交換值就好了
* 如果 list 中只有一個節點,就算交換了也會是原本的樣子,所以直接回傳
Code:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode Node;
Node* swapNodes(Node* head, int k){
if(head->next == NULL){
return head;
}
Node *cur, *node1, *node2;
node1 = NULL;
node2 = NULL;
cur = head;
int i = 0;
for(i = 0; i < k-1; i++){
cur = cur->next;
}
node1 = cur;
cur = head;
for(i = 0; i < k; i++){
cur = cur->next;
}
node2 = head;
while(cur){
node2 = node2->next;
cur = cur->next;
}
if(node1){
printf("node1: %d\n", node1->val);
}
if(node2){
printf("node2: %d\n", node2->val);
}
int tmp;
tmp = node1->val;
node1->val = node2->val;
node2->val = tmp;
return head;
}
留言
張貼留言